在网络上文件传输可以通过各种不同的方式和协议来完成。远程复制文件最常用的协议是Rsync、SCP和SFTP。在本文中,我们将了解什么是 SCP以及如何在 Linux 和类 Unix 操作系统中使用 SCP 在本地和远程计算机之间安全地传输文件。
什么是 SCP?
SCP,代表安全复制(Secure Copy),它是一个命令行程序,在 Linux 和类 Unix 操作系统中以安全的方式在本地和远程系统之间,或在两个远程系统之间复制文件和目录。
使用scp命令,你可以安全地复制文件或目录:
◈从本地到远程系统
◈从远程系统到本地
◈在两个远程系统之间
使用scp命令传输数据时,文件和目录都是加密的。因此,即使网络被破坏,作恶者也无法获得任何有意义的数据。
SCP 是 openSSH 程序的一个组件,它使用 SSH 协议安全地传输文件。几乎所有现代 Linux 和 Unix 发行版都预装了 OpenSSH,所以不必费心安装它。
提醒一句:
根据 openSSH 开发人员的官方公告:
scp 协议已经过时了,它不灵活且不易修复。我们建议使用更现代的协议,如sftp和rsync来代替。
但是,大多数用户仍然更喜欢 SCP 协议。因为,SCP 处理远程文件传输比同行 SFTP 和 Rsync 更快。
另外,SCP 的工作原理与cp命令完全相同,而rsync则会判断源目录是否有结尾斜杠而出现不同的行为。看一看下面的命令:
◈rsync source destination/- 将source目录复制到destination文件夹内。
◈rsync source/ destination/- 将source目录的内容复制到destination文件夹中。
所以,你必须反复检查是否在路径中添加了斜杠。
我个人使用Rsync ostechnix.com在两台主机之间复制大文件,使用 SCP 在网络上复制单个文件。
SCP 命令语法
SCP 的通用语法如下:
scp [-346ABCpqrTv] [-c cipher] [-F ssh_config] [-i identity_file] [-J destination] [-l limit] [-o ssh_option] [-P port] [-S program] source ... target
根据文件传输路径的不同,语法也会有所不同。这里我罗列了一些语法格式示例。
从本地复制一个文件到远程系统:
scp
类似的,从本地系统复制一个目录到远程系统,使用-r参数:
scp -r SourceDirectory User@RemoteHost:RemotePath
复制多个文件到远程系统:
scp
远程系统复制文件到本地:
scp
远程系统复制目录到本地:
scp -r User@RemoteHost:RemoteDirectoryPath DestinationDirectory
在本地将文件在两个远程系统之间复制:
scp
注意,当你在两个远程系统之间复制文件时,流量不会通过本地系统。操作直接在两个远程系统之间进行。但是,你可以使用-3参数让流量经过你运行scp命令的系统。
从你的本地系统将一个远程系统的目录复制到另一个远程系统:
scp -r User@RemoteHost1:RemoteDirectory User@RemoteHost2:DestinationPath
SCP 命令参数
SCP 命令最常用的参数有:
SCP 有很多参数,你可以查看它的手册页来了解其他参数。让我们看一些有用的 scp 命令示例。
开始前要记住的重要事项
在 Linux 中使用 SCP 传输文件
正如我所说,我们可以使用scp命令将文件或目录从本地复制到远程系统,反之亦然,或者在两台远程系统之间复制文件或目录。
1. 使用 SCP 从本地系统复制文件到远程系统
使用scp命令将文件从本地复制到远程系统,运行:
$ scp File1.txt ostechnix@192.168.1.40:/home/ostechnix/
示例输出:
ostechnix@192.168.1.40's password:
File1.txt 100% 104 814.0KB/s 00:00
让我们分析一下上面的命令,看看每个参数都做了什么。
◈File1.txt- 源文件
◈ostechnix- 远程系统的用户名
◈192.168.1.40- 远程系统的 IP 地址
◈/home/ostechnix/- 远程系统中的目标目录。
这是我们想要传输源文件的绝对路径,如File.txt。
你还可以修改目标文件的名称。下面的命令将File1.txt传输到目的地,保存为myfile.txt。
$ scp File1.txt ostechnix@192.168.1.40:/home/ostechnix/myfile.txt
将文件从本地复制到远程系统
2. 使用 SCP 从本地系统复制多个文件到远程系统
使用scp命令将多个文件从本地系统传输到远程系统,运行:
$ scp File1.txt File2.txt ostechnix@192.168.1.40:/home/ostechnix/
示例输出:
ostechnix@192.168.1.40's password:
File1.txt 100% 104 689.4KB/s 00:00
File2.txt 100% 496 6.3MB/s 00:00
从本地复制多个文件到远程系统
这里:
◈File1.txt和File2.txt- 源文件名
◈ostechnix@192.168.1.40- 远程系统的用户名和 IP 地址
◈/home/ostechnix- 目标文件的路径
如果文件具有相同的扩展名,你可以使用以下替代命令来实现相同的目标。
$ scp {File1,File2}.txt ostechnix@192.168.1.40:/home/ostechnix/
或者,
$ scp *.txt ostechnix@192.168.1.40:/home/ostechnix/
3. 使用 SCP 从本地到远程系统递归复制目录
递归地将整个目录(包括子目录及其内容)从本地复制到远程系统,使用-r参数。
$ scp -r Documents/ ostechnix@192.168.1.40:/home/ostechnix/
从本地复制目录到远程系统
上述命令将整个Documents目录包括其内容复制到目标系统。
其中,
4. 用 SCP 将文件从远程系统传输到本地
还记得我们从本地系统复制了File1.txt到远程系统,让我们把它复制回本地。
使用scp命令从远程系统复制文件到本地,运行:
$ scp ostechnix@192.168.1.40:/home/ostechnix/File1.txt Downloads/
其中
从远程系统传输文件到本地
5. 使用 SCP 将多个文件从远程系统传输到本地
将多个文件从远程系统复制到本地,在花括号内注明文件的绝对路径,如下所示:
$ scp ostechnix@192.168.1.40:/home/ostechnix/{File1.txt,File2.txt} Downloads/
将多个文件从远程系统传输到本地
上述命令将从远程系统的/home/ostechnix/目录中复制File1.txt和File2.txt到本地的Downloads目录中。
注意,花括号内的逗号后面没有空格。
6. 从远程系统递归复制目录到本地
使用scp从远程系统递归复制整个目录(包括子目录及其内容)到本地系统,使用-r参数。
$ scp -r ostechnix@192.168.1.40:/home/ostechnix/Documents Downloads/
上述命令将从远程系统将整个Documents目录复制到本地的Downloads目录。
7. 使用 SCP 在两台远程计算机之间复制文件
使用scp命令将文件从一个远程系统直接复制到另一个远程系统,运行:
$ scp senthil@192.168.1.40:/home/senthil/File1.txt kumar@192.168.1.20:/home/kumar/
它会要求你输入两个远程系统的密码:
其中,
上述命令将从远程主机192.168.1.40复制/home/senthil/File1.txt到192.168.1.20上的/home/kumar/目录。
在这种方法中,数据将直接从一个远程系统传输到另一个远程系统。如果你想通过本地机器路由流量,使用-3参数,如下所示:
$ scp -3 senthil@192.168.1.40:/home/senthil/File1.txt kumar@192.168.1.20:/home/kumar/
8. 使用 SCP 复制文件时启用压缩
到目前为止,我们在没有压缩的情况下传输了文件。现在我们将使用-C参数在传输文件时启用压缩。
$ scp -C File1.txt ostechnix@192.168.1.40:/home/ostechnix/
-C参数将在源端启用压缩,并在目标端自动解压数据。
通过启用压缩,可以显著提高文件复制或传输速度。
9. 使用 SCP 传输文件时限制带宽
我们可以使用-l参数限制带宽。注意,最大带宽单位为 Kbits/s。1 Byte = 8 bit。因此,如果你想将带宽限制在 200KB/s,-l的值将是1600(200*8)。
$ scp -l 1600 File1.txt ostechnix@192.168.1.40:/home/ostechnix/
这在传输大文件时非常有用,可以防止 SCP 限制带宽。
10. 使用 SCP 复制文件时使用不同端口
作为系统管理员,出于安全原因,你可能在远程服务器上更改了 SSH 协议的默认端口 ostechnix.com。这种情况下,你可以在传输文件时使用-P参数指定端口号。注意:大写的P。
$ scp -P 2022 File1.txt ostechnix@192.168.1.40:/home/ostechnix/
11. 使用 SCP 复制文件时使用不同的加密方法
默认情况下,SCP 使用AES-128对文件进行加密。如果你想使用不同的加密方法,使用c参数。
例如,如果你想使用3des-cbc加密方法,命令如下所示:
$ scp -c 3des-cbc File1.txt ostechnix@192.168.1.40:/home/ostechnix/
要查看支持的密码列表,执行:
$ ssh -Q cipher localhost | paste -d, -s -
示例输出:
3des-cbc,aes128-cbc,aes192-cbc,aes256-cbc,rijndael-cbc@lysator.liu.se,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,chacha20-poly1305@openssh.com
12. 在详细模式下使用 SCP 复制文件
如果你想知道使用scp复制文件时幕后发生了什么,你可以使用-v参数。使用详细模式传输文件时,终端上会显示执行scp命令执行的每一步过程。这在故障排除时很方便。
$ scp -v File1.txt ostechnix@192.168.1.40:/home/ostechnix/
在详细模式下发送文件时,你将看到大量输出,如下所示:
在详细模式下使用 SCP 复制文件
13. 在安静模式下使用 SCP 传输文件
我们可以使用-q参数在安静模式下传输文件。在安静模式下共享文件时,不会在输出中显示进度、警告或诊断信息。
$ scp -q File1.txt ostechnix@192.168.1.40:/home/ostechnix/
14. 使用 SCP 传输文件时保留文件属性
使用-p参数可以保留文件修改时间、访问时间和模式等文件属性。注意,这是小写的 p。
$ scp -p File1.txt ostechnix@192.168.1.40:/home/ostechnix/
15. 使用 SCP 复制文件时使用身份文件
SSH 同时支持基于密码和密钥的身份验证。密钥是 Linux 环境中使用最广泛的身份验证方法。
如果你想在传输文件时使用基于密钥的身份验证,使用-i参数指定身份文件或私钥。
$ scp -i my_private_key.pem File1.txt ostechnix@192.168.1.40:/home/ostechnix/
16. 使用不同的 ssh 配置文件
在某些情况下,你需要使用不同的网络来连接到 Linux 系统,或你有一个代理服务器。这在情况下,你可以配合-F参数使用不同的ssh_config文件。
$ scp -F /home/ostechnix/my_ssh_config File1.txt ostechnix@192.168.1.40:/home/ostechnix/
17. 使用 IPv4 或 IPv6 复制文件
在复制文件时,我们可以强制 SCP 只使用 IPv4 或 IPv6 地址。IPv4 网络添加-4参数,IPv6 网络添加-6参数可以实现这一点。
$ scp -6 File1.txt ostechnix@192.168.1.40:/home/ostechnix/
常见问题
问题 1:什么是 SCP?
SCP 是一个命令行程序,旨在将文件和目录从本地系统安全地传输到远程系统,反之亦然,或者直接在两个远程系统之间传输。
问题 2: 如何使用 SCP 将文件从本地复制到远程计算机?
将文件从本地复制到远程系统,命令如下:
scp SourceFile.txt User@RemoteHost:/some/remote/directory
问题 3:如何递归复制文件和目录?
递归复制包含子目录的目录,使用-r参数:
scp -r /some/local/directory User@RemoteHost:/some/remote/directory
问题 4:使用 SCP 可以传输多个文件吗?
当然,只要用空格分隔源文件名即可。
从本地复制多个文件到远程:
scp file1.txt file2.txt file3.txt User@RemoteHost:/some/remote/directory
scp {file1,file2,file3}.txt User@RemoteHost:/some/remote/directory
scp *.txt User@RemoteHost:/some/remote/directory
从远程复制多个文件到本地:
scp User@RemoteHost:/some/remote/directory/{file1.txt,file2.txt,file3.txt} /some/local/directory
从一个远程系统复制多个文件到另一个远程系统:
$ scp User@RemoteHost1:/some/remote/directory/{file1.txt,file2.txt,file3.txt} User@RemoteHost2:/some/remote/directory/
问题 5:如何传输目录下的所有文件?
传输整个目录,首先进入该目录:
cd dir_name
然后,
scp *.txt User@RemoteHost:/some/remote/directory
问题 6:可以压缩文件吗?
当然。使用-C压缩文件。文件会在源端压缩,在目标端自动解压缩。
scp -C /some/large/file User@RemoteHost:/some/remote/directory
问题 7:可以保留文件属性吗?
保留原始文件的修改时间、访问时间和模式等文件属性,使用-p参数。
scp -p file.txt User@RemoteHost:/some/remote/directory
问题 8: 可以使用其他端口吗?
当然。SCP 配合-P参数允许你使用其他端口。
scp -P 2022 file.txt User@RemoteHost:/some/remote/directory
问题 9: 可以使用不同的加密方法吗?
当然。使用-c参数。
scp -c 3des-cbc User@RemoteHost:/some/remote/directory
问题 10: 如何列出 SSH 支持的加密方法?
使用以下命令查看 SSH 和 SCP 支持的加密方法列表:
ssh -Q cipher localhost | paste -d, -s -
问题 11:SCP 真的安全吗?
当然,它用起来是完全安全的。SCP 和 openSSH 使用相同的 SSH 机制。传输的数据在源端加密,目标端解密。
问题 12:可以从 Windows 系统传输文件到 Linux 吗?
当然。使用PSCP程序将文件从 windows 传输到 Linux 平台,你也可以使用WinSCP。
总结
在这篇全面指南中,我们了解了什么是 SCP,以及如何在 Linux 中使用SCP 安全地传输文件,其中包括17 个 SCP 命令示例,另外还回答了关于 SCP 的常见问题。
无论你是 Linux 管理人员、开发人员还是普通用户,你都会面临某个时候将文件复制到远程系统或从远程系统复制文件的情况,知道如何使用 SCP 安全地复制文件将是非常有用的。
审核编辑:刘清
-
Linux
+关注
关注
87文章
11425浏览量
212390 -
UNIX操作系统
+关注
关注
0文章
13浏览量
15429 -
SSH
+关注
关注
0文章
193浏览量
16725 -
SCP
+关注
关注
0文章
30浏览量
9452
原文标题:如何在 Linux 中使用 SCP 安全地传输文件
文章出处:【微信号:良许Linux,微信公众号:良许Linux】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
Linux是Unix操作系统的一种变种
UNIX操作系统类型
Linux操作系统下的PCI驱动开发

unix和linux的区别

Linux操作系统在定制PMP DM320的应用解析
unix是什么操作系统_unix操作系统怎么安装

从vista、UNIx和Linux说起全面讲解操作系统
什么是Linux及其操作系统的特点
使用SCP和Rsync在Linux中传输文件
Unix和Linux的差异

飞凌嵌入式携手中移物联,谱写全国产化方案新生态
4月22日,飞凌嵌入式“2025嵌入式及边缘AI技术论坛”在深圳成功举办。中移物联网有限公司(以下简称“中移物联”)携OneOS操作系统与飞凌嵌入式共同推出的工业级核心板亮相会议展区,操作系统产品部高级专家严镭受邀作《OneOS工业操作系统——助力国产化智能制造》主题演讲。

ATA-2022B高压放大器在螺栓松动检测中的应用
实验名称:ATA-2022B高压放大器在螺栓松动检测中的应用实验方向:超声检测实验设备:ATA-2022B高压放大器、函数信号发生器,压电陶瓷片,数据采集卡,示波器,PC等实验内容:本研究基于振动声调制的螺栓松动检测方法,其中低频泵浦波采用单频信号,而高频探测波采用扫频信号,利用泵浦波和探测波在接触面的振动声调制响应对螺栓的松动程度进行检测。通过螺栓松动检测

MOS管驱动电路——电机干扰与防护处理
此电路分主电路(完成功能)和保护功能电路。MOS管驱动相关知识:1、跟双极性晶体管相比,一般认为使MOS管导通不需要电流,只要GS电压(Vbe类似)高于一定的值,就可以了。MOS管和晶体管向比较c,b,e—–>d(漏),g(栅),s(源)。2、NMOS的特性,Vgs大于一定的值就会导通,适合用于源极接地时的情况(低端驱动),只要栅极电压达到4V或10V就可以

压敏(MOV)在电机上的应用剖析
一前言有刷直流电机是一种较为常见的直流电机。它的主要特点包括:1.结构相对简单,由定子、转子、电刷和换向器等组成;2.通过电刷与换向器的接触来实现电流的换向,从而使电枢绕组中的电流方向周期性改变,保证电机持续运转;3.具有调速性能较好等优点,可以通过改变电压等方式较为方便地调节转速。有刷直流电机在许多领域都有应用,比如一些电动工具、玩具、小型机械等。但它也存

硬件原理图学习笔记
这一个星期认真学习了硬件原理图的知识,做了一些笔记,方便以后查找。硬件原理图分为三类1.管脚类(gpio)和门电路类输入输出引脚,上拉电阻,三极管与门,或门,非门上拉电阻:正向标志作用,给悬空的引脚一个确定的状态三极管:反向三极管(gpio输出高电平,NP两端导通,被控制端导通,电压为0)->NPN正向三极管(gpio输出低电平,PN两端导通,被控制端导通,

TurMass™ vs LoRa:无线通讯模块的革命性突破
TurMass™凭借其高传输速率、强大并发能力、双向传输、超强抗干扰能力、超远传输距离、全国产技术、灵活组网方案以及便捷开发等八大优势,在无线通讯领域展现出强大的竞争力。

RZT2H CR52双核BOOT流程和例程代码分析
RZT2H是多核处理器,启动时,需要一个“主核”先启动,然后主核根据规则,加载和启动其他内核。本文以T2H内部的CR52双核为例,说明T2H多核启动流程。

干簧继电器在RF信号衰减中的应用与优势
在电子测试领域,RF(射频)评估是不可或缺的一部分。无论是研发阶段的性能测试,还是生产环节的质量检测,RF测试设备都扮演着关键角色。然而,要实现精准的RF评估,测试设备需要一种特殊的电路——衰减电路。这些电路的作用是调整RF信号的强度,以便测试设备能够准确地评估RF组件和RF电路的各个方面。衰减器的挑战衰减器的核心功能是校准RF信号的强度。为了实现这一点,衰

ElfBoard嵌入式教育科普|ADC接口全面解析
当代信息技术体系中,嵌入式系统接口作为数据交互的核心基础设施,构成了设备互联的神经中枢。基于标准化通信协议与接口规范的技术架构,实现了异构设备间的高效数据交换与智能化协同作业。本文选取模数转换接口ADC作为技术解析切入点,通过系统阐释其工作机理、性能特征及重要参数,为嵌入式学习者爱好者构建全维度接口技术认知框架。

深入理解C语言:C语言循环控制
在C语言编程中,循环结构是至关重要的,它可以让程序重复执行特定的代码块,从而提高编程效率。然而,为了避免程序进入无限循环,C语言提供了多种循环控制语句,如break、continue和goto,用于改变程序的执行流程,使代码更加灵活和可控。本文将详细介绍这些语句的作用及其应用场景,并通过示例代码进行说明。Part.1break语句C语言中break语句有两种

第 21 届(顺德)家电电源与智能控制技术研讨会圆满落幕--其利天下斩获颇丰
2025年4月25日,其利天下应大比特之邀出席第21届(顺德)家电电源与智能控制技术研讨会,已圆满落幕。一、演讲回顾我司研发总监冯建武先生在研讨会上发表了主题为《重新定义风扇驱动:一套算法兼容百种电机的有效磁链观测器方案》的演讲,介绍了我司研发自适应技术算法(简称),该方案搭载有效磁链观测器,适配百种电机类型,结合FOC算法可实现免调参稳定启动、低速静音控制

来自资深工程师对ELF 2开发板的产品测评
来自资深工程师对ELF 2开发板的使用测评

飞凌嵌入式2025嵌入式及边缘AI技术论坛圆满结束
飞凌嵌入式「2025嵌入式及边缘AI技术论坛」在深圳深铁皇冠假日酒店盛大举行,此次活动邀请到了200余位嵌入式技术领域的技术专家、企业代表和工程师用户,共享嵌入式及边缘AI技术的盛宴!

常用运放电路总结记录
一、电压跟随器电压跟随器,电路图如下:电路分析:(本文所有的运放电路分析,V+表示运放同向输入端的电压,V-表示反向输入端的电压。)1.1电压跟随器反馈电阻需不需要?在上面的电压跟随器示例中,我画上了一个反馈电阻R99,大家在学习的运放的时候,可能很多地方也会提一下这个反馈电阻,很多地方会说可加可不加,效果一样。电阻需不需要加:但是本文这里个人建议使用电压跟

运放-运算放大器经典应用电路大全-应用电路大全-20种经典电路
20种运放典型电路总结,电路图+公式1、运放的符号表示2、集成运算放大器的技术指标(1)开环差模电压放大倍数(开环增益)大Ao(Ad)=Vo/(V±V-)=107-1012倍;(2)共模抑制比高KCMRR=100db以上;(3)输入电阻大ri>1MW,有的可达100MW以上;(4)输出电阻小ro=几W-几十W3、集成运放分析方法(V+=V-虚短,ib-=ib
评论