Linux中怎么使用SCP命令安全传输文件,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
SCP(安全复制)是 Linux 和 Unix 之类的系统中的命令行工具,用于通过网络安全地跨系统传输文件和目录。当我们使用 scp
命令将文件和目录从本地系统复制到远程系统时,则在后端与远程系统建立了 ssh 连接。换句话说,我们可以说 scp
在后端使用了相同的 SSH 安全机制,它需要密码或密钥进行身份验证。
在本教程中,我们将讨论 14 个有用的 Linux scp
命令示例。
scp
命令语法:
# scp <选项> <文件或目录> 用户名@目标主机:/<文件夹> # scp <选项> 用户名@目标主机:/文件 <本地文件夹>
scp
命令的第一个语法演示了如何将文件或目录从本地系统复制到特定文件夹下的目标主机。
scp
命令的第二种语法演示了如何将目标主机中的文件复制到本地系统中。
下面列出了 scp
命令中使用最广泛的一些选项,
-C
启用压缩
-i
指定识别文件或私钥
-l
复制时限制带宽
-P
指定目标主机的 ssh 端口号
-p
复制时保留文件的权限、模式和访问时间
-q
禁止 SSH 警告消息
-r
递归复制文件和目录
-v
详细输出
现在让我们跳入示例!
假设我们要使用 scp
命令将 jdk 的 rpm 软件包从本地 Linux 系统复制到远程系统(172.20.10.8),请使用以下命令,
[root@linuxtechi ~]$ scp jdk-linux-x64_bin.rpm root@linuxtechi:/optroot@linuxtechi's password:jdk-linux-x64_bin.rpm 100% 10MB 27.1MB/s 00:00[root@linuxtechi ~]$
上面的命令会将 jdk 的 rpm 软件包文件复制到 /opt
文件夹下的远程系统。
假设我们想将文件从远程系统复制到本地系统下的 /tmp
文件夹,执行以下 scp
命令,
[root@linuxtechi ~]$ scp root@linuxtechi:/root/Technical-Doc-RHS.odt /tmproot@linuxtechi's password:Technical-Doc-RHS.odt 100% 1109KB 31.8MB/s 00:00[root@linuxtechi ~]$ ls -l /tmp/Technical-Doc-RHS.odt-rwx------. 1 pkumar pkumar 1135521 Oct 19 11:12 /tmp/Technical-Doc-RHS.odt[root@linuxtechi ~]$
在 scp
命令中,我们可以使用 -v
选项启用详细输出。使用详细输出,我们可以轻松地发现后台确切发生了什么。这对于调试连接、认证和配置等问题非常有用。
root@linuxtechi ~]$ scp -v jdk-linux-x64_bin.rpm root@linuxtechi:/optExecuting: program /usr/bin/ssh host 172.20.10.8, user root, command scp -v -t /optOpenSSH_7.8p1, OpenSSL 1.1.1 FIPS 11 Sep 2018debug1: Reading configuration data /etc/ssh/ssh_configdebug1: Reading configuration data /etc/ssh/ssh_config.d/05-redhat.confdebug1: Reading configuration data /etc/crypto-policies/back-ends/openssh.configdebug1: /etc/ssh/ssh_config.d/05-redhat.conf line 8: Applying options for *debug1: Connecting to 172.20.10.8 [172.20.10.8] port 22.debug1: Connection established.…………debug1: Next authentication method: passwordroot@linuxtechi's password:
可以使用 scp
命令一次性将多个文件复制/传输到远程系统,在 scp
命令中指定多个文件,并用空格隔开,示例如下所示
[root@linuxtechi ~]$ scp install.txt index.html jdk-linux-x64_bin.rpm root@linuxtechi:/mntroot@linuxtechi's password:install.txt 100% 0 0.0KB/s 00:00index.html 100% 85KB 7.2MB/s 00:00jdk-linux-x64_bin.rpm 100% 10MB 25.3MB/s 00:00[root@linuxtechi ~]$
使用 scp
命令,我们可以在两个远程主机之间复制文件和目录,假设我们有一个可以连接到两个远程 Linux 系统的本地 Linux 系统,因此从我的本地 Linux 系统中,我可以使用 scp
命令在这两个系统之间复制文件,
命令语法:
# scp 用户名@远程主机1:/<要传输的文件> 用户名@远程主机2:/<文件夹>
示例如下:
# scp root@linuxtechi:~/backup-Oct.zip root@linuxtechi:/tmp# ssh root@linuxtechi "ls -l /tmp/backup-Oct.zip"-rwx------. 1 root root 747438080 Oct 19 12:02 /tmp/backup-Oct.zip
在 scp
命令中使用 -r
选项将整个目录从一个系统递归地复制到另一个系统,示例如下所示:
[root@linuxtechi ~]$ scp -r Downloads root@linuxtechi:/opt
使用以下命令验证 Downloads
文件夹是否已复制到远程系统,
[root@linuxtechi ~]$ ssh root@linuxtechi "ls -ld /opt/Downloads"drwxr-xr-x. 2 root root 75 Oct 19 12:10 /opt/Downloads[root@linuxtechi ~]$
在 scp
命令中,我们可以通过使用 -C
选项启用压缩来提高传输速度,它将自动在源主机上启用压缩并在目标主机上解压缩。
root@linuxtechi ~]$ scp -r -C Downloads root@linuxtechi:/mnt
在以上示例中,我们正在启用压缩的情况下传输下载目录。
在 scp
命令中使用 -l
选项设置复制时对带宽使用的限制。带宽以 Kbit/s 为单位指定,示例如下所示:
[root@linuxtechi ~]$ scp -l 500 jdk-linux-x64_bin.rpm root@linuxtechi:/var
在某些情况下,目标主机上的 ssh 端口会更改,因此在使用 scp
命令时,我们可以使用 -P
选项指定 ssh 端口号。
[root@linuxtechi ~]$ scp -P 2022 jdk-linux-x64_bin.rpm root@linuxtechi:/var
在上面的示例中,远程主机的 ssh 端口为 “2022”。
从源复制到目标时,在 scp
命令中使用 -p
选项保留权限、访问时间和模式。
[root@linuxtechi ~]$ scp -p jdk-linux-x64_bin.rpm root@linuxtechi:/var/tmpjdk-linux-x64_bin.rpm 100% 10MB 13.5MB/s 00:00[root@linuxtechi ~]$
在 scp
命令中使用 -q
选项可禁止显示 ssh 的传输进度、警告和诊断消息。示例如下所示:
[root@linuxtechi ~]$ scp -q -r Downloads root@linuxtechi:/var/tmp[root@linuxtechi ~]$
在大多数 Linux 环境中,首选基于密钥的身份验证。在 scp
命令中,我们使用 -i
选项指定识别文件(私钥文件),示例如下所示:
[root@linuxtechi ~]$ scp -i my_key.pem -r Downloads root@linuxtechi:/root
在上面的示例中,my_key.pem
是识别文件或私钥文件。
在某些情况下,你使用不同的网络连接到 Linux 系统,可能某些网络位于代理服务器后面,因此在这种情况下,我们必须具有不同的 ssh_config
文件。
通过 -F
选项在 scp
命令中指定了不同的 ssh_config
文件,示例如下所示:
[root@linuxtechi ~]$ scp -F /home/pkumar/new_ssh_config -r Downloads root@linuxtechi:/rootroot@linuxtechi's password:jdk-linux-x64_bin.rpm 100% 10MB 16.6MB/s 00:00backup-Oct.zip 100% 713MB 41.9MB/s 00:17index.html 100% 85KB 6.6MB/s 00:00[root@linuxtechi ~]$
默认情况下,scp
使用 AES-128 加密方式来加密文件。如果你想在 scp
命令中使用其他加密方式,请使用 -c
选项,后接加密方式名称。
假设我们要在用 scp
命令传输文件时使用 3des-cbc 加密方式,请运行以下 scp
命令:
[root@linuxtechi ~]# scp -c 3des-cbc -r Downloads root@linuxtechi:/root
使用以下命令列出 ssh
和 scp
支持的加密方式:
[root@linuxtechi ~]# ssh -Q cipher localhost | paste -d , -s -3des-cbc,aes128-cbc,aes192-cbc,aes256-cbc,root@linuxtechi,aes128-ctr,aes192-ctr,aes256-ctr,root@linuxtechi,root@linuxtechi,root@linuxtechi[root@linuxtechi ~]#
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。