如何在 Linux 中使用 SCP 命令

一个简单的教程,可帮助您使用 scp 命令将文件从 Linux 系统传输到远程系统。

SCP 代表“安全副本”。 SCP 是 Linux 提供的命令行实用程序,它允许通过不安全的网络将文件和目录从一台机器传输到另一台机器。

如果您希望将文件从一个系统复制到另一个系统,则 SCP 可以是安全传输文件和目录的一个很好的选择。当两台通信机器通过同一网络连接时,然后使用 SCP 成为可能。

您可以高度依赖 SCP 机密性和完整性命令,因为正在传输的文件和用于传输的密码都是加密的。即使有人试图在此传输过程中窥探流量,也不会泄露任何敏感信息。

在本教程中,我们将看到不同的示例 SCP 命令。我们还将查看一些常用的选项 SCP 命令。

开始使用 scp 命令

使用 SCP 您可以传输文件/目录的命令:

  • 从本地机器到远程机器。
  • 在两台远程机器之间。
  • 从远程机器到本地机器。

一般语法:

scp [选项] [source_file_name] [user@destination_Host]:destination_folder

让我们一一了解这个命令的基本属性。

  • [source_file_name] 这是您要复制的源文件。
  • [用户@destination_Host] 这是要复制文件的远程系统的用户名。远程机器的IP地址也用在这个属性后面的‘@' 象征。
  • [目的地文件夹] 这是您要保存复制文件的目录。

笔记: 冒号 (:) 符号用于语法中,因为它区分本地和远程位置。我们使用冒号 (:) 与远程系统一起指定文件应复制到的目录。如果我们不指定目标目录,那么文件将被复制到远程系统用户的主目录。

使用的选项 SCP

一些最流行的选项与 SCP 命令如下。

选项描述
-C允许压缩要传输的文件
-v给出详细的输出
-r递归复制文件和目录
-p保留文件的权限、模式和访问时间
-P更改使用的默认端口 SCP 命令

我们将在教程中进一步看到这些选项的示例。

将文件从本地复制到远程系统

SCP 允许您使用以下语法将文件从本地系统传输到远程系统。这允许您将文件传输或上传到远程放置的服务器。

一般语法:

scp [文件名] remote_user@host:[destination_folder]

例子:

scp apache-tomcat-9.0.8.tar.gz [email protected]:gaurav

在此示例中,我们将文件“apache-tomcat-9.0.8.tar.gz”从本地系统复制到 IP 地址为“143.110.178.221”的远程系统。

在远程系统上,文件现在将复制到名为“gaurav”的目录中。

输出:

gaurav@ubuntu:~$ scp apache-tomcat-9.0.8.tar.gz [email protected]:gaurav [email protected] 的密码:ap​​ache-tomcat-9.0.8.tar.gz 100% 99.589KB /s 02:00 gaurav@ubuntu:~$ 

让我们检查远程系统上文件的输出。

root@ubuntu-s-1vcpu-1gb-blr1-01:~/gaurav# ls apache-tomcat-9.0.8.tar.gz root@ubuntu-s-1vcpu-1gb-blr1-01:~/gaurav#

因此,文件成功复制到远程系统使用 SCP 命令。

将多个文件复制到远程系统

在前面的例子中,我们学会了使用 SCP 命令。我们现在将看到使用此命令将多个文件从本地系统传输到远程系统的方法。

一般语法:

scp [文件 1] [文件 2] [文件 n] remote_username@remote_host:[特定目录]

让我们通过一个例子来理解这个简单的过程。

例子:

scp ath.html abc.txt ppa-purge_0.2.8+bzr56_all.deb [email protected]:gaurav

在这里,要在远程系统上复制的命令中提到了多个文件。

输出:

gaurav@ubuntu:~$ scp ath.html abc.txt ppa-purge_0.2.8+bzr56_all.deb [email protected]:gaurav [email protected] 的密码: ath.html 100%.KB7790 02 abc.txt 100% 0 0.0KB/s 00:00 ppa-purge_0.2.8+bzr56_all.deb 100% 4360 42.2KB/s 00:00 gaurav@ubuntu:~$

在远程系统上:

root@ubuntu-s-1vcpu-1gb-blr1-01:~/gaurav# ls -l total 9800 -rw-r--r-- 1 root root 0 Oct 5 08:58 abc.txt -rw-r-- r-- 1 根根 9818695 Oct 5 08:35 apache-tomcat-9.0.8.tar.gz -rw-r--r-- 1 根根 204057 Oct 5 08:58 ath.html -rw-r-- r-- 1 根根 4360 Oct 5 08:58 ppa-purge_0.2.8+bzr56_all.deb root@ubuntu-s-1vcpu-1gb-blr1-01:~/gaurav#

所有三个文件现在都复制到远程系统上。

将目录复制到远程系统

您可以使用 SCP 命令将目录从本地系统复制到远程系统。该过程类似于复制文件的过程。要复制目录的内容,您可以使用 -r 选项与 SCP 命令。

-r 选项用于递归复制目录。这意味着,目录中的所有子文件夹和文件也将被复制。

一般语法:

scp -r [目录路径] remote_username@remote_host:[target_directory]

例子:

scp -r PycharmProjects [email protected]:gaurav

输出:

gaurav@ubuntu:~$ scp -r PycharmProjects [email protected]:gaurav [email protected] 的密码:__main__.py 100% 623 7.8KB/s 00:00 __init.04py. :00 completion.py 100% 2929 28.1KB/s 00:00 search.py​​ 100% 4728 38.7KB/s 00:00 uninstall.py 100% 2963 32.5KB/s 00:00 hash.py 100% 16381KB s 00:00 check.py 100% 1430 16.8KB/s 00:00 configuration.py 100% 7125 50.4KB/s 00:00 show.py 100% 6289 49.8KB/s 00:00 下载.py 6234% KB/s 00:00 gaurav@ubuntu:~$ 

使用 -r 选项与 SCP 命令将目录中的所有子文件夹和文件从本地机器复制到远程系统。

显示有关 scp 进程的详细信息

您可以使用 -v (小写 v) 选项以显示有关在远程或本地系统上复制的文件的信息。这种类型的输出也称为详细输出。

使用此选项时,有关文件的完整调试信息将显示在屏幕上。

一般语法:

scp -v [file_name] user_name@user_host:

例子:

scp -v apache-tomcat-9.0.8.tar.gz [email protected]:team

输出:

gaurav@ubuntu:~$ scp -v apache-tomcat-9.0.8.tar.gz [email protected]:team 执行:程序/usr/bin/ssh 主机159.89.170.11,用户root,命令scp -v -t团队 OpenSSH_7.6p1 Ubuntu-4ubuntu0.3,OpenSSL 1.0.2n 2017 年 12 月 7 日 debug1:读取配置数据 /home/gaurav/.ssh/config debug1:读取配置数据 /etc/ssh/ssh_config debug1:/etc/ssh/ssh_config第 19 行:为 * debug1 应用选项:连接到 159.89.170.11 [159.89.170.11] 端口 22。debug1:连接已建立。 debug1: key_load_public: 没有那个文件或目录 debug1: 身份文件 /home/gaurav/.ssh/id_rsa type -1 apache-tomcat-9.0.8.tar.gz 100% 9589KB 99.8KB/s 01:36 debug1: client_input_channel_req:通道 0 rtype 退出状态回复 0 debug1:通道 0:空闲:客户端会话,nchannels 1 debug1:fd 0 清除 O_NONBLOCK debug1:fd 1 清除 O_NONBLOCK 传输:发送 9826736,接收 4016 字节,在 97.2 秒内每秒发送字节数: 101133.9,收到41.3 debug1:退出状态0 gaurav@ubuntu:~$ 

在这里,在输出中,您可以看到文件的调试信息正在显示在您的终端上时 SCP 命令与 -v 选项。

在两个远程主机之间传输文件

Linux 允许您连接到多个远程主机。您可以使用以下命令在两个远程主机之间传输文件和目录 SCP 命令。

一般语法:

scp remote_user_1@host_1:/[file_name] remote_user_2@host_2:[folder_to_save]

语法可能看起来有点宽,但非常简单。在这里,命令的第一部分给出了有关要从何处复制文件的远程用户的输入。冒号 (:) 和 / 用于指定要在两台远程机器之间传输的文件名或目录名。

第二部分提供有关要复制文件的目标远程系统的信息。

例子:

scp -r [email protected]:gaurav [email protected]:/team

在这里,我们将递归地将名为“gaurav”的目录从本地系统复制到远程系统。该文件将被复制到远程系统上的文件夹“team”。

输出:

gaurav@ubuntu:~$ scp -r [email protected]:/gaurav [email protected]:/team [email protected] 的密码:1.py 100% 134 261.3KB00 variables.00 100% 377 949.2KB/s 00:00 abc.txt 100% 0 0.0KB/s 00:00 ath.html 100% 199KB 41.8MB/s 00:00 gaurav@ubuntu:~$

在这里,我们使用了 SCP 本地系统上的命令将名为“gaurav”的目录从一个远程服务器传输到另一个。

将文件从远程系统传输到本地系统

您可以使用以下命令轻松地将文件或目录从远程系统传输到本地系统 SCP 命令。简而言之,您可以使用以下命令将多个文件或目录从远程服务器下载到本地系统 SCP 命令。

一般语法:

scp remote_username@user_host:/files/file.txt /[folder_of_local_system]

输出:

gaurav@ubuntu:~$ scp [email protected]:how.txt 。 [email protected] 的密码:how.txt 100% 11 0.1KB/s 00:00 gaurav@ubuntu:~$

在这里,我已将文件从远程服务器下载(复制)到我的主目录中。因此,我使用了点 (.) 在命令中指定将文件复制到我的主目录。

示例输出:

gaurav@ubuntu:~$ ls -l how.txt -rw-r--r-- 1 gaurav gaurav 11 Oct 6 09:49 how.txt gaurav@ubuntu:~$ 

在这里,文件现在从远程服务器复制到我的主目录。

以同样的方式,您可以使用从远程服务器下载多个文件或目录 SCP 命令与适当的选项。

压缩文件以加快传输速度

有时,传输大文件可能很耗时。这个问题可以在使用时解决 SCP 命令与 -C (大写 C) 选项。

使用 -C 选项,压缩较大的文件,这有利于更快的传输,从而节省时间。

关于此选项的一个有趣事实是,文件在目标系统上以其原始大小复制,但在传输过程中,大小被压缩以实现更快的传输。因此,压缩仅在网络上完成。

一般语法:

scp -C [file_name] user_name@user_host:[target_folder]

让我们看一个比较示例以了解差异。

不带 -C 选项的传输:

gaurav@ubuntu:~$ scp -rv dlink [email protected]:team 执行:程序 /usr/bin/ssh 主机 68.183.82.183,用户 root,命令 scp -v -r -t team OpenSSH_7.6p1 Ubuntu-4ubuntu0。 3、OpenSSL 1.0.2n 7 Dec 2017 debug1: 读取配置数据 /home/trinity/.ssh/config debug1: 读取配置数据 /etc/ssh/ssh_config debug1: /etc/ssh/ssh_config line 19: Applying options for * debug1 :连接到 68.183.82.183 [68.183.82.183] 端口 22。 debug1:连接建立。 debug1: client_input_channel_req: channel 0 rtype exit-status reply 0 debug1: channel 0: free: client-session, nchannels 1 debug1: fd 0 clearing O_NONBLOCK debug1: fd 1 clearing O_NONBLOCK Transferred: 发送 7516504, 接收 4008.6 字节秒每秒:发送 100693.7,收到 53.7 debug1:退出状态 0 gaurav@ubuntu:~$ 

从上面的输出我们可以看出,传输所需的时间是 74.6 秒。我们将尝试使用 -C 选项传输相同的文件并观察差异。

使用 -C 选项传输:

gaurav@ubuntu:~$ scp -Crv dlink [email protected]:team 执行:程序 /usr/bin/ssh 主机 68.183.82.183,用户 root,命令 scp -v -r -t team OpenSSH_7.6p1 Ubuntu-4ubuntu0。 3、OpenSSL 1.0.2n 7 Dec 2017 debug1: 读取配置数据 /home/trinity/.ssh/config debug1: 读取配置数据 /etc/ssh/ssh_config debug1: /etc/ssh/ssh_config line 19: Applying options for * debug1 :连接到 68.183.82.183 [68.183.82.183] 端口 22。 debug1:连接建立。 . . webupload.img 100% 1834KB 98.7KB/s 00:18 发送文件方式:C0664 1877552 router.img Sink:C0664 1877552 router.img router.img 100% 1834KB 100.3KB/s 04 发送文件方式:C00016 3754103 DSL-2750U-Release-IN-T-01.00.07.zip 接收器:C0664 3754103 DSL-2750U-Release-IN-T-01.00.07.zip DSL-2750U-Release-IN-T-07.07.01. 100% 3666KB 218.5KB/s 00:16 Sink: E debug1: client_input_channel_req: channel 0 rtype exit-status reply 0 debug1: channel 0: free: client-session, nchannels 1 debug1: fd 0 clearing O_NONBLOCK debug1: ONNB1传输:发送 7518864,接收 3828 字节,51.0 秒每秒字节数:发送 100245.4,接收 51.0 debug1:退出状态 0 debug1:压缩传出:原始数据 7511925,压缩 7513136,因子 1.00 传入压缩数据 1.00 压缩 debug71 999,因子 0.68 gaurav@ubuntu:~$

在这里,我们可以很容易地观察到,使用 -C 选项与 SCP 命令允许我们通过网络压缩文件,从而证明是一个节省时间的选择。

使用不同的 ssh 端口进行文件传输

在使用时 SCP 命令部署的默认端口是 端口 22.用户可以自由定制此端口选择。您可以使用 -P (大写 P 选项)与 SCP 命令以使用您选择的端口。

一般语法:

cp -P [new_port_number] [file_name/directory_name] remote_user@host:[destination_folder]

例子:

scp -P 4248 dlink [email protected]:team

使用上面的命令,文件将被传输到远程服务器。但这一次,使用的端口将是 端口 4248 而不是默认 端口 22.

结论

完成本教程后,我们了解了 SCP 用于将文件从一个系统传输或复制到另一个系统的命令。此选项还可用于从远程服务器下载文件或目录。因此,我们可以得出结论, SCP 当您必须同时处理多个系统和远程服务器时,命令证明对文件传输非常有用。