如何使用SCP命令来安全地传输文件
SCP(安全拷贝)是一个命令行工具,它允许你在两个地点之间安全地复制文件和目录。
用scp
,你可以复制一个文件或目录。
- 从你的本地系统到一个远程系统。
- 从一个远程系统到你的本地系统。
- 在两个远程系统之间,从你的本地系统出发。
当用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
会在没有警告的情况下覆盖文件。
用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
参数指定端口。
scp -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
命令将远程文件复制到本地系统中
要把一个文件从远程系统复制到本地系统,把远程位置作为源,本地位置作为目标。
例如,要从IP为10.10.0.2
的远程服务器上复制一个名为file.txt
的文件,请运行以下命令。
scp remote_username@10.10.0.2:/remote/file.txt /local/directory
如果你没有设置无密码SSH登录到远程机器,你将被要求输入用户密码。
使用scp
命令在两个远程系统之间复制文件
与rsync
不同,当使用scp
时,你不必登录到其中一个服务器,就可以将文件从一个服务器传输到另一个远程机器上。
下面的命令将把文件/files/file.txt
从远程主机host1.com
复制到远程主机host2.com
的目录/files
。
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
命令来复制文件和目录。
您可能还想设置一个基于SSH密钥的认证,并在不输入密码的情况下连接到您的Linux服务器上。
如果您经常连接到相同的系统,您可以通过在SSH配置文件中定义所有的连接来简化您的工作流程。