SCP(安全复制)是一个非常有用命令行工具,允许您在两个位置之间安全地复制文件和目录。
使用scp,您可以复制文件或目录。
- 从本地系统到远程系统。
- 从远程系统到本地系统。
- 在本地系统的两个远程系统之间。
使用scp传输数据时,文件和密码都是加密的,这样任何窥探流量的人都不会得到任何敏感信息。
scp命令语法
在讨论如何使用scp
命令之前,先回顾一下基本语法。
scp命令表达式采用以下形式:
scp [OPTION] [user@]SRC_HOST:]file1 [user@]DEST_HOST:]file2
OPTION
- scp选项,如密码,ssh配置,ssh端口,限制,递归复制..等[user@]SRC_HOST:]file1
- 源文件。[user@]DEST_HOST:]file2
- 目标文件
应使用绝对或相对路径指定本地文件,而远程文件名应包括用户名和主机名
scp提供了许多控制其行为各个方面的选项。最广泛使用的选项是:
-P
指定远程主机ssh端口。-p
保留文件修改和访问时间。-q
如果要禁止进度和非错误消息,请使用此选项。-C
此选项将强制scp在将数据发送到目标计算机时压缩数据。-r
此选项将告诉scp以递归方式复制目录
在开始之前
scp
命令依赖于ssh
数据传输,因此需要ssh密钥或密码才能在远程系统上进行身份验证。
scp使用冒号(:
)来区分本地和远程的位置。
为了能够复制文件,您必须至少具有对源文件的读取权限和对目标系统的写入权限。
在两个系统上复制共享相同名称和位置的文件时要小心,scp会在没有警告的情况下覆盖文件。
传输大文件时,建议在nohup或tmux会话中运行scp命令。
使用scp命令将本地文件复制到远程系统
要将文件从本地复制到远程系统,请运行以下命令:
scp file.txt remote_username@10.10.0.2:/remote/directory
这里file.txt
是我们要复制的文件的名称,remote_username
是远程服务器上的用户,10.10.0.2
是服务器的IP地址。/remote/directory
是你要复制的文件在远程服务器的位置,如果不指定远程目录,文件将被复制到远程用户的家目录。
系统将提示您输入用户密码,然后将开始传输过程。
remote_username@10.10.0.2's password:
file.txt 100% 0 0.0KB/s 00:00
从目标位置省略文件名会使用原来名称。如果要以不同的名称保存文件,则需要指定新名称。
scp file.txt remote_username@10.10.0.2:/remote/directory/newfilename.txt
如果远程主机上的SSH正在侦听默认端口22以外的端口,则可以使用以下-P
参数指定端口。
ssh -P 2322 file.txt remote_username@10.10.0.2:/remote/directory
复制目录的命令与复制文件时的命令非常相似。唯一的区别是你需要使用-r
标志进行递归。
要将目录从本地复制到远程系统,请使用-r
选项。
scp -r /local/directory remote_username@10.10.0.2:/remote/directory
使用scp命令将远程文件复制到本地系统
要将文件从远程文件复制到本地系统,请使用远程位置作为源和本地位置作为目标。
例如要将 file.txt
从远程服务器复制到本地。
scp remote_username@10.10.0.2:/remote/file.txt /local/directory
如果尚未设置无密码SSH登录到远程计算机,则会要求您输入用户密码。
使用scp命令在两个远程系统之间复制文件
与rsync不同,使用scp时,您无需登录其中一台服务器即可将文件从一台远程计算机传输到另一台远程计算机。
下面的命令将文件/files/file.txt
从远程主机host1.com
的目录/files
复制到远程主机host2.com
上。
scp user1@host1.com:/files/file.txt user2@host2.com:/files
系统将提示您输入两个远程帐户的密码。数据将直接从一个远程主机传输到另一个远程主机。
要计算路由流量,请使用以下-3
选项:
scp -3 user1@host1.com:/files/file.txt user2@host2.com:/files
至此你已学习了如何使用scp命令复制文件和目录,如你有任何疑问请在评论中留言