SCP全称Safe copy。是一个命令行程序,可让您在计算机之间安全地复制文件和目录。

使用scp,您可以复制文件或目录,从本地系统到远程系统。从远程系统到本地系统。在本地系统的两个远程系统之间。

使用scp传输数据时,文件均已加密,因此任何窥探流量的人都无法查看其内容。

在本教程中,我们将通过实际示例和最常见的scp选项的详细说明,向您展示如何使用scp命令。

在开始使用scp命令之前,让我们先回顾一下基本语法。scp命令语法采用以下形式。

scp [OPTION] [user@]SRC_HOST:]file1 [user@]DEST_HOST:]file2

OPTIONscp是可选项选项,例如密码,ssh配置,ssh端口,限制,递归副本等

[user@]SRC_HOST:]file源文件。[user@]DEST_HOST:]file2目标文件。

应使用绝对或相对路径指定本地文件,而远程文件名应包含用户和主机名。scp提供了许多控制其行为的选项。最广泛使用的选项是。

-P指定远程主机ssh端口。-p保留文件修改和访问时间。-q选项禁止显示进度和非错误消息。

-C此选项将强制scp在将数据发送到目标计算机时对其进行压缩。-r此选项将指示scp递归复制目录。

scp命令依赖ssh进行数据传输,因此需要ssh密钥或密码才能在远程系统进行身份验证。冒号:scp区分本地位置和远程位置的方法。

要能够复制文件,您必须至少具有对源文件的读取权限和对目标文件系统的写入权限。

在两个系统之间复制相同名称和位置的文件时要小心,scp会在没有警告的情况下覆盖文件。传输大文件时,建议在screentmux会话中运行scp命令。

scp 复制本地文件到远程

要将文件从本地复制到远程系统,请运行命令scp file.txt remote_username@10.10.0.2:/remote/directory

其中,file.txt是我们要复制的文件的名称,remote_username是远程服务器的用户名,10.10.0.2是远程计算机IP地址。

/remote/directory是要将文件复制到远程计算机的目录。如果您未指定远程目录,则文件将被复制到远程用户的家目录。

如果目标位置省略文件名会保留原始文件的名称。如果要使用其他名称保存文件,则需要指定文件名。

当复制本地文件到远程计算机时,如果您尚未为远程计算机设置无密码SSH登录名,则会要求您输入用户密码,然后开始传输过程。

#目标位置省略文件名
scp file.txt remote_username@10.10.0.2:/remote/directory

#目标位置指定文件名
scp file.txt remote_username@10.10.0.2:/remote/directory/newfilename.txt
remote_username@10.10.0.2's password:
file.txt                             100%    0     0.0KB/s   00:00

如果远程主机的SSH服务不是监听默认端口22,则可以使用-P参数选项指定端口。

制目录的命令与复制文件时非常相似。唯一的区别是您需要使用-r选项进行递归复制。

#-p指定SSH端口
scp -P 2322 file.txt remote_username@10.10.0.2:/remote/directory
#-r递归复制
scp -r /local/directory remote_username@10.10.0.2:/remote/directory

scp 复制远程文件到本地系统

要将文件从远程复制到本地系统,请将远程位置作为源,并使用本地目录作为目标位置。

例如,要从IP是10.10.0.2的远程服务器复制名为file.txt的文件,请运行以下scp命令。

如果您尚未为远程计算机设置无密码SSH登录名,则会要求您输入用户密码。

scp remote_username@10.10.0.2:/remote/file.txt /local/directory

scp 远程系统之间复制文件

rsync不同,使用scp时,您无需登录到其中一台服务器即可将文件从一台远程计算机传输到另一台远程计算机。

以下命令会将文件/files/file.txt从远程主机host1.com复制到远程主机host2.com上的目录/files

系统将提示您输入两个远程帐户的密码。数据将直接从一台远程主机传输到另一台远程主机。

scp user1@host1.com:/files/file.txt user2@host2.com:/files

结论

在本教程中,您学习了如何使用scp命令复制文件和目录。您可能还想设置基于 SSH密钥的身份验证,然后不输入密码即可连接到Linux服务器。

如果您定期连接到相同的系统,则可以通过在SSH配置文件中定义所有连接来简化工作流程。