如何使用SCP命令来安全地传输文件

评论 0 浏览 0 2018-09-19

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会在没有警告的情况下覆盖文件。

当传输大文件时,建议在屏幕tmux会话内运行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配置文件中定义所有的连接来简化您的工作流程。

最后更新2023-06-06
0 个评论
标签