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

在 Linux 系统中安全传输文件的利器:scp 命令详解

在 Linux 环境下,服务器之间的文件传输是常见的操作。虽然有多种方法可以实现这个目标,但若安全是首要考虑因素,那么可选项就相对减少。其中,最简单且安全可靠的方案就是使用 scp (安全复制) 命令。本文将深入探讨如何在 Linux 系统中使用 scp 命令来安全地传输文件。

什么是 Linux 中的 scp 命令?

scp 命令在安全网络环境下的文件传输中扮演着至关重要的角色。它是安全复制协议 (Secure Copy Protocol) 的缩写,基于 SSH (安全外壳) 连接,在两个系统之间安全地传输文件和目录。由于 SSH 连接会对数据进行加密,因此使用 scp 命令可以确保文件传输过程中的安全性。简单来说,可以将 scp 命令视为 cp 命令的加强版,关于 cp 命令的更多信息可以在其他 Linux 终端命令的相关文章中找到。

如何使用 scp 命令:语法与参数

在使用 scp 命令进行文件传输之前,让我们先了解它的基本语法和常用参数:

scp [选项] [email protected]_ip_address:源文件路径> [email protected]_ip_address:目标路径>

语法解读:

  • [email protected]_ip_address:源文件路径>:指定要从中传输文件或目录的“源”系统。
  • [email protected]_ip_address:目标路径>:指定要将文件或目录传输到的“目标”系统。

如果省略目标路径参数,scp 命令会将文件复制到本地系统。常用的参数选项包括:

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

如何使用 scp 命令复制文件

在使用 scp 命令之前,你需要确保满足以下先决条件:

  • 已安装 SSH 服务。
  • 拥有 root 权限或具有 sudo 权限的用户。

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

若要将本地系统中的文件传输到远程目标,请使用以下语法:

scp [选项] 本地文件路径 [email protected]:远程目标路径

以下是一个示例:

scp test.txt [email protected]:/home/remote2/Documents/

在此示例中:

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

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

若要将远程主机的文件传输到本地计算机,请使用以下 scp 命令语法:

scp [选项] [email protected]:远程文件路径 本地存储路径

例如,要从远程服务器传输一个名为 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 密钥作为额外的安全措施。以下是如何执行此操作:

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

ssh-keygen -t <加密算法>

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

3. 接下来,系统会询问你 SSH 密钥的存储位置。你可以将其存储在任何你选择的位置或默认位置。

4. 你可以选择设置密码或直接按回车键留空。

5. 然后,使用以下命令将公钥复制到目标服务器。这样,你甚至可以使用 SSH 无密码登录到目标系统。

ssh-copy-id [email protected]

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

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

scp [选项] [email protected]:要传输的文件路径 [email protected]:远程存储路径

假设你需要将名为 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 文件路径1 文件路径2 [email protected]:远程存储路径

例如,如果你需要发送四个文件,包括 test1.txttest2.pytest3.shtest4.c 到一个远程接收者,可以使用以下命令:

scp -P 22 test1.txt test2.py test3.sh test4.c [email protected]:/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 *.扩展名 [email protected]:远程存储路径

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

scp *.py [email protected]:/home/remote_1/

在这里,

  • *.py 表示所有 Python 文件
  • remote1 是接收者的用户名
  • 10.10.11.113是接收方的 IP 地址
  • /home/remote_1/ 是存储接收到的文件的位置

常见问题解答

SCP 文件传输安全吗?

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

SCP 比 SFTP 更安全吗?

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

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

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