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

假设你想在 Linux 系统上的服务器之间传输一些文件。 您可以通过多种方式完成任务,但如果您的首要任务是安全地传输文件,那么您只有几个选择。 最简单的解决方案是使用 scp 或安全复制命令来传输您的文件,而不必担心安全问题。 在本文中,我们将解释如何在您的 Linux 系统上使用 scp 命令安全地使用传输文件。

在 Linux 中使用 scp 命令传输文件(2023)

Linux 中的 scp 命令是什么

当谈到通过安全网络传输文件时,scp 命令可能非常有用。 它代表安全复制协议,通过 SSH(安全外壳)连接在两个系统之间传输文件和目录。 使用 ssh,您可以确保文件的安全性,因为它们在默认情况下是加密的。 简单来说,scp 命令是 cp 命令的更安全版本,您可以在我们的 Linux 终端命令文章中阅读所有相关信息。

如何使用 scp 命令:语法和选项

在我们可以通过 scp 传输文件之前,让我们看看这里命令的语法和选项:

scp <选项> <[email protected]_ip_address:path/to/source/file> <[email protected]_ip_address:目标/路径>

理解语法:

  • 首先,<[email protected]_ip_address:path/to/source/file> 指定您需要从中传输文件/目录的“源”系统。
  • 第二,<[email protected]_ip_address:target/path> 指定要将文件/目录传输到的“目标”系统。

如果你留下以上任何一个参数,Linux中的scp命令会先查找文件,然后将文件复制到本地。 与命令配对的一些选项是:

OptionsDestination-P 指定连接主机系统的端口。 如果省略,则默认使用端口 22。-p 复制到目标系统时保留原始文件的修改时间、访问时间和模式。-r 将整个目录递归复制到目标系统。-J 用于连接源系统和目标系统通过代理系统(跳转主机)。-3使用此标志时,它会将文件复制到目标系统和本地系统-4强制 scp 命令仅使用 IPv4 地址。-6强制scp 命令仅使用 IPv6 地址。

  如何在 Linux 上玩我们曾在一起

如何使用 scp 命令复制文件

在 Linux 中使用 scp 命令之前,您需要在主机和目标系统上满足一些先决条件:

  • 应该安装ssh
  • root 访问权限或任何具有 sudo 权限的用户

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

如果您有文件需要从本地系统传输到远程目标,则需要使用以下语法:

scp @:

如果上面的语法看起来很复杂,一个例子将把它弄清楚:

scp 测试.txt [email protected]:/home/remote2/文档/

在上面的例子中:

  • test.txt 是要传输的文件的名称,它位于本地系统的当前目录中。
  • test 是目标系统上的用户名。
  • 139.144.11.105 是目标系统的 IP 地址。
  • /home/remote2/Documents/ 是目标系统上将保存传输文件的位置。

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

如果需要将文件从远程主机传输到本地计算机,请在 Linux 系统上使用以下 scp 命令语法:

scp @:

例如,假设您需要从您正在使用的远程服务器传输一个名为 test.py 的文件,请使用以下命令:

scp [email protected]:/home/test/test1.py ~/test1.py

在这个例子中:

  • test 是远程主机的用户名。
  • 10.10.11.113 是远程主机 IP 地址。
  • /home/test/test1.py 是要从远程主机传输的文件的路径。
  • ~/test1.py 是传输到本机并存放到home目录后的文件名。

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

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

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

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

ssh-keygen -t <加密算法>

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

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

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

5. 然后,使用以下命令将公钥复制到目标服务器。 有了这个,您甚至可以使用 ssh 无需密码登录到目标系统。

  如何在 Linux 上使用 look 命令

ssh-copy-id @

注意:无密码登录方法仅适用于您为其生成 ssh 密钥的用户。

6. 在远程服务器上创建并存储 ssh 密钥后,使用此 scp 命令语法在运行 Linux 的两个远程系统之间交换文件:

scp @: @:

假设您需要将名为 test.txt 的文件从一台远程主机传输到另一台远程接收器,请使用以下命令:

scp [email protected]:/home/test1/test.txt [email protected]:/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 @:

例如——假设你需要发送四个文件,包括test1.txt、test2.py、test3.sh和test4.c,到一个远程接收者,你可以使用下面的命令:

scp -P 22 test1.txt test2.py test3.sh test4.c [email protected]:/home/remote_1/文档

让我们了解示例中的命令如何工作以及它的作用:

  • -p 2222 用于指定通过22端口连接
  • test1.txt test2.py test3.sh test4.c 是要传输的文件名
  • remote_1 是接收系统的用户名
  • 10.10.11.113是接收方的IP地址
  • /home/remote_1/Documents 是指存放接收到的文件的路径。

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

scp . @:

例如,如果您需要将所有 .py 文件发送到远程服务器,请在 Linux 终端中使用以下 scp 命令:

scp *.py [email protected]:/家/远程_1/

这里,

  • *.py 表示所有 python 文件
  • remote1 是接收者的用户名
  • 10.10.11.113是接收方的IP地址
  • /home/remote_1/ 是存放接收到的文件的位置
  如何修复 JBoss AS 在 Linux 中启动时卡住的问题?

经常问的问题

SCP 文件传输安全吗?

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

SCP 比 SFTP 更安全吗?

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

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

在某个时间点,每个用户都需要通过网络交换一些文件。 即使在高延迟网络上,scp 命令也可以轻松安全高效地传输文件。 当然,了解各种 scp 选项和语法也很有用。 您还可以参考我们关于如何在 Linux 中重命名文件以及如何在 Linux 中删除文件的指南,以进一步提高您在操作系统上的文件管理技能。 我们希望本文能帮助您了解如何使用 scp 命令在 Linux 计算机上传输文件。 如果您在使用该命令时遇到任何问题,请在评论部分告诉我们。