如何在 Linux 中使用 scp 命令安全地传输文件

如何使用 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/是目标系统上将保存传输文件的位置。
transfer_local_to_remote

将文件从远程主机复制到本地目标

如果需要将文件从远程主机传输到本地计算机,请在 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_remote_to_local

将文件从一个远程主机传输到另一个远程目标

使用 scp 命令,您不仅可以在本地系统和远程机器之间传输文件,还可以在两个远程系统之间传输文件。但是,在将文件从一个远程系统传输到另一个远程系统之前,建议在源系统上生成一个 ssh 私钥和一个 ssh 公钥,并将公钥的副本存储在目标系统中。

通常,用户在两个远程系统之间传输文件时会抱怨“主机密钥验证失败”错误。要绕过错误,请使用 ssh-key 作为附加措施。我们已经在此处解释了如何执行此操作:

1. 使用以下命令在源服务器上生成公钥/私钥对:

ssh-keygen -t <encryption_algorithm>

2. 对于加密算法,您可以使用rsa最常用的算法“,”或您选择的任何其他算法。

3. 然后,系统会要求您选择存储 ssh 密钥的位置。您可以将其存储在您选择的任何位置或默认位置。

4. 对于密码,您可以输入您选择的任何内容或按 Enter 将其留空。

ssh_keygen_sender

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>

transfer_two_remote

假设您需要将名为 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指存放接收到的文件的路径。
send_multiple_files

您甚至可以使用通配符发送具有相同扩展名的多个文件,如下所示:

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/是存储接收到的文件的位置
transfer_multiple_wildcard

经常问的问题

SCP 文件传输安全吗?

安全复制协议或 scp 是一种基于 SSH 技术的协议,使用加密和身份验证在两台主机之间交换文件。这确保了两台主机之间完全的数据安全性和完整性。

SCP 比 SFTP 更安全吗?

SCP 和 SFTP 协议在安全性方面不相上下。在 SFTP 上使用 scp 的主要优点是传输速度快,这在高延迟网络中特别有用。

原创文章,作者:校长,如若转载,请注明出处:https://www.yundongfang.com/Yun217778.html

(0)
打赏 微信扫一扫不于多少! 微信扫一扫不于多少! 支付宝扫一扫礼轻情意重 支付宝扫一扫礼轻情意重
上一篇 2023年3月7日 下午9:08
下一篇 2023年3月7日 下午9:21

相关推荐