如何使用 scp 命令:语法和选项
在我们可以通过 scp 传输文件之前,让我们看看这里命令的语法和选项:
scp <option> <host_user_name@host_ip_address:path/to/source/file> <target_user_name@target_ip_address:target/path>
理解语法:
- 首先,
<host_user_name@host_ip_address:path/to/source/file>
指定您需要从中传输文件/目录的“源”系统。 - 其次,
<target_user_name@target_ip_address:target/path>
指定要将文件/目录传输到的“目标”系统。
如果你留下以上任何一个参数,Linux中的scp命令会先查找文件,然后将文件复制到本地。与命令配对的一些选项是:
选项 | 目的地 |
---|---|
-P |
指定连接主机系统的端口。如果省略,则默认使用端口 22。 |
-p |
在复制到目标系统时保留原始文件的修改时间、访问时间和模式。 |
-r |
递归地将整个目录复制到目标系统。 |
-J |
用于通过代理系统(跳转主机)连接源系统和目标系统。 |
-3 |
使用此标志时,它会将文件复制到目标系统和本地系统 |
-4 |
强制 scp 命令仅使用 IPv4 地址。 |
-6 |
强制 scp 命令仅使用 IPv6 地址。 |
如何使用 scp 命令复制文件
在 Linux 中使用 scp 命令之前,您需要在主机和目标系统上满足一些先决条件:
- 应该安装ssh
- root 访问权限或任何具有 sudo 权限的用户
将文件从本地主机复制到远程目标
如果您有文件需要从本地系统传输到远程目标,则需要使用以下语法:
scp <options>
<path_to_local_file> <remote_user>@<remote_target_ip_address>:<path_to_store_in_remote_destination>
如果上面的语法看起来很复杂,一个例子将把它弄清楚:
scp test.txt remote2@139.144.11.105:/home/remote2/Documents/
在上面的例子中:
test.txt
是要传输的文件的名称,它位于本地系统的当前目录中。test
是目标系统上的用户名。139.144.11.105
是目标系统的 IP 地址。/home/remote2/Documents/
是目标系统上将保存传输文件的位置。
将文件从远程主机复制到本地目标
如果需要将文件从远程主机传输到本地计算机,请在 Linux 系统上使用以下 scp 命令语法:
scp <options>
<remote_user>@<remote_host_ip_address>:<path_of_file_to_transfer> <path_to_store_file>
例如,假设您需要从您正在使用的远程服务器传输一个名为 test.py 的文件,请使用以下命令:
scp test@10.10.11.113:/home/test/test1.py ~/test1.py
在这个例子中:
test
是远程主机用户名。10.10.11.113
是远程主机IP地址。/home/test/test1.py
是要从远程主机传输的文件的路径。~/test1.py
是传输到本地机器并存储在主目录中后的文件名。
将文件从一个远程主机传输到另一个远程目标
使用 scp 命令,您不仅可以在本地系统和远程机器之间传输文件,还可以在两个远程系统之间传输文件。但是,在将文件从一个远程系统传输到另一个远程系统之前,建议在源系统上生成一个 ssh 私钥和一个 ssh 公钥,并将公钥的副本存储在目标系统中。
通常,用户在两个远程系统之间传输文件时会抱怨“主机密钥验证失败”错误。要绕过错误,请使用 ssh-key 作为附加措施。我们已经在此处解释了如何执行此操作:
1. 使用以下命令在源服务器上生成公钥/私钥对:
ssh-keygen -t <encryption_algorithm>
2. 对于加密算法,您可以使用rsa
最常用的算法“,”或您选择的任何其他算法。
3. 然后,系统会要求您选择存储 ssh 密钥的位置。您可以将其存储在您选择的任何位置或默认位置。
4. 对于密码,您可以输入您选择的任何内容或按 Enter 将其留空。
5. 然后,使用以下命令将公钥复制到目标服务器。有了这个,您甚至可以使用 ssh 无需密码登录到目标系统。
ssh-copy-id <destination_username>@<destination_ip_address>
注意:无密码登录方法仅适用于您为其生成 ssh 密钥的用户。
6. 在远程服务器上创建并存储 ssh 密钥后,使用此 scp 命令语法在运行 Linux 的两个远程系统之间交换文件:
scp <options> <remote_user_1>@<remote_host_ip_address>:<path_of_file_to_transfer> <remote_user_2>@<remote_target_ip_address>:<path_to_store_in_remote_destination>
假设您需要将名为 test.txt 的文件从一台远程主机传输到另一台远程接收器,请使用以下命令:
scp remote1@10.10.11.113:/home/test1/test.txt remote2@10.11.27.111:/home/remote2/Documents/test1.txt
在这个例子中:
remote1
是远程发送主机中的用户名10.10.11.113
是远程发送主机的IP地址/home/test1/test.txt
是要发送的文件的路径remote2
是远程接收器目标中的用户名10.11.27.111
是远程接收目标的IP地址/home/remote2/Documents/test1.txt
是要接收的文件要保存的名称和路径。
使用 scp 命令传输多个文件
一个一个地传输多个文件对任何人来说都是一项乏味的任务。相反,您可以使用以下语法在 Linux 上使用 scp 命令交换文件:
scp <path_to_file_1> <path_to_file_2> <remote_receiver>@<remote_target_ip_address>:<path_to_store_in_remote_destination>
例如——假设你需要发送四个文件,包括test1.txt、test2.py、test3.sh和test4.c,到一个远程接收者,你可以使用下面的命令:
scp -P 22 test1.txt test2.py test3.sh test4.c remote1@10.10.11.113:/home/remote_1/Documents
让我们了解示例中的命令如何工作以及它的作用:
-p 2222
用于指定通过端口22连接test1.txt test2.py test3.sh test4.c
是要传输的文件的名称remote_1
是接收系统的用户名10.10.11.113
是接收者的IP地址/home/remote_1/Documents
指存放接收到的文件的路径。
您甚至可以使用通配符发送具有相同扩展名的多个文件,如下所示:
scp <wildcard>.<extension> <remote_receiver>@<remote_target_ip_address>:<path_to_store_in_remote_destination>
例如,如果您需要将所有 .py 文件发送到远程服务器,请在 Linux 终端中使用以下 scp 命令:
scp *.py remote1@10.10.11.113:/home/remote_1/
这里,
*.py
表示所有python文件remote1
是接收者的用户名10.10.11.113
是接收者的IP地址/home/remote_1/
是存储接收到的文件的位置
经常问的问题
安全复制协议或 scp 是一种基于 SSH 技术的协议,使用加密和身份验证在两台主机之间交换文件。这确保了两台主机之间完全的数据安全性和完整性。
SCP 和 SFTP 协议在安全性方面不相上下。在 SFTP 上使用 scp 的主要优点是传输速度快,这在高延迟网络中特别有用。