在 Linux 上安全传输文件的 14 个 SCP 命令示例

2023-10-05 06:34

SCP(安全复制)是 Linux 和 Unix 等系统中的命令行工具,用于通过网络跨系统安全地传输文件和目录。 ——普拉迪普·库马尔(作者)

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 详细输出

现在让我们进入示例!

示例:1)使用 scp 将文件从本地系统复制到远程系统

假设我们要使用scp命令将本地Linux系统中的jdk的rpm包复制到远程系统(172.20.10.8),请使用以下命令,

[root@linuxtechi ~]$ scp jdk-linux-x64_bin.rpm root@linuxtechi:/opt
root@linuxtechi 的密码:
jdk-linux-x64_bin.rpm 100% 10MB 27.1MB/秒 00:00
[root@linuxtechi ~]$

上面的命令会将jdk rpm包文件复制到远程系统的/opt文件夹下。

示例:2)使用 scp 将文件从远程系统复制到本地系统

假设我们要将远程系统中的文件复制到本地系统下的/tmp文件夹中,执行以下scp命令,

[root@linuxtechi ~]$ scp root@linuxtechi:/root/Technical-Doc-RHS.odt /tmp
root@linuxtechi 的密码:
技术文档-RHS.odt 100% 1109KB 31.8MB/s 00:00
[root@linuxtechi ~]$ ls -l /tmp/Technical-Doc-RHS.odt
-rwx------。 1 pkumar pkumar 1135521 十月 19 日 11:12 /tmp/Technical-Doc-RHS.odt
[root@linuxtechi ~]$

示例:3) 使用 scp (-v) 传输文件时的详细输出

在 scp 命令中,我们可以使用 -v 选项启用详细输出。使用详细输出,我们可以轻松发现幕后到底发生了什么。这对于调试连接、身份验证和配置问题非常有用。

root@linuxtechi ~]$ scp -v jdk-linux-x64_bin.rpm root@linuxtechi:/opt执行:程序 /usr/bin/ssh 主机 172.20.10.8,用户 root,命令 scp -v -t /opt
OpenSSH_7.8p1、OpenSSL 1.1.1 FIPS 2018 年 9 月 11 日
debug1:读取配置数据/etc/ssh/ssh_config
debug1:读取配置数据/etc/ssh/ssh_config.d/05-redhat.conf
debug1:读取配置数据 /etc/crypto-policies/back-ends/openssh.config
debug1: /etc/ssh/ssh_config.d/05-redhat.conf 第 8 行:应用 * 的选项
debug1:连接到 172.20.10.8 [172.20.10.8] 端口 22。
debug1:连接已建立。
…………
debug1:下一个身份验证方法:密码
root@linuxtechi 的密码:

示例:4) 传输多个文件到远程系统

您可以使用 scp 命令一次将多个文件复制/传输到远程系统。 scp命令中指定多个文件,并用空格分隔。例子如下

[root@linuxtechi ~]$ scp install.txt index.html jdk-linux-x64_bin.rpm root@linuxtechi:/mnt
root@linuxtechi 的密码:
安装.txt 100% 0 0.0KB/秒 00:00
索引.html 100% 85KB 7.2MB/秒 00:00
jdk-linux-x64_bin.rpm 100% 10MB 25.3MB/秒 00:00[root@linuxtechi ~]$

示例:5)在两个远程主机之间传输文件

使用 scp 命令我们可以在两个远程主机之间复制文件和目录,假设我们有一个可以连接到两个远程 Linux 系统的本地 Linux 系统,因此从我的本地 Linux 系统中,我可以使用 scp 命令在这些主机之间复制文件两个系统,

命令语法:

# scp 用户名@远程主机1:/<要传输的文件> 用户名@远程主机2:/<文件夹>

示例如下:

# scp root@linuxtechi:~/www.ydxcj.com root@linuxtechi:/tmp
# ssh root@linuxtechi“ls -l /tmp/www.ydxcj.com”
-rwx------。 1 root root 747438080 10 月 19 日 12:02 /tmp/www.ydxcj.com

示例:6)递归复制文件和目录(-r)

使用 scp 命令中的 -r 选项将整个目录从一个系统递归复制到另一个系统,如下所示:

[root@linuxtechi ~]$ scp -r 下载 root@linuxtechi:/opt

使用以下命令验证“下载”文件夹是否已复制到远程系统,

[root@linuxtechi ~]$ ssh root@linuxtechi "ls -ld /opt/Downloads"
drwxr-xr-x。 2 root root 75 Oct 19 12:10 /opt/Downloads
[root@linuxtechi ~]$

示例:7) 通过启用压缩来提高传输速度 (-C)

在 scp 命令中,我们可以通过使用 -C 选项启用压缩来提高传输速度,该选项将自动在源主机上启用压缩并在目标主机上解压缩。

root@linuxtechi ~]$ scp -r -C 下载 root@linuxtechi:/mnt

在上面的示例中,我们正在传输启用压缩的下载目录。

示例:8) 复制时限制带宽 (-l)

使用 scp 命令的 -l 选项来设置复制时的带宽使用限制。带宽以 Kbit/s 为单位,示例如下:

[root@linuxtechi ~]$ scp -l 500 jdk-linux-x64_bin.rpm root@linuxtechi:/var

示例:9) scp

时指定不同的 ssh 端口 (-P)

在某些情况下,目标主机上的ssh端口会发生变化,因此在使用scp命令时,我们可以使用-P选项指定ssh端口号。

[root@linuxtechi ~]$ scp -P 2022 jdk-linux-x64_bin.rpm root@linuxtechi:/var

在上面的例子中,远程主机的ssh端口是“2022”。

示例:10) 复制时保留文件权限、模式和访问时间(-p)

在从源复制到目标时,使用 scp 命令中的 -p 选项保留权限、访问时间和模式。

[root@linuxtechi ~]$ scp -p jdk-linux-x64_bin.rpm root@linuxtechi:/var/tmp
jdk-linux-x64_bin.rpm 100% 10MB 13.5MB/秒 00:00
[root@linuxtechi ~]$

示例:11)在 scp 中以安静模式传输文件(-q)

将 -q 选项与 scp 命令一起使用可以禁止显示 ssh 的传输进度、警告和诊断消息。一个例子如下:

[root@linuxtechi ~]$ scp -q -r 下载 root@linuxtechi:/var/tmp
[root@linuxtechi ~]$

示例:12)传输时使用scp中的标识文件(-i)

在大多数 Linux 环境中,首选基于密钥的身份验证。在scp命令中,我们使用-i选项来指定标识文件(私钥文件),示例如下:

[root@linuxtechi ~]$ scp -i my_key.pem -r 下载 root@linuxtechi:/root

上例中,my_key.pem 为标识文件或私钥文件。

示例:13) 在 scp 中使用其他 ssh_config 文件 (-F)

在某些情况下,您使用不同的网络连接到Linux系统,也许某些网络位于代理服务器后面,所以在这种情况下,我们必须有不同的ssh_config文件。

在 scp 命令中通过 -F 选项指定不同的 ssh_config 文件,示例如下:

[root@linuxtechi ~]$ scp -F /home/pkumar/new_ssh_config -r 下载 root@linuxtechi:/root
root@linuxtechi 的密码:
jdk-linux-x64_bin.rpm 100% 10MB 16.6MB/秒 00:00
备份-www.ydxcj.com 100% 713MB 41.9MB/s 00:17
索引.html 100% 85KB 6.6MB/秒 00:00
[root@linuxtechi ~]$

示例:14)在 scp 命令中使用其他加密方法(-c)

默认情况下,scp 使用 AES-128 加密来加密文件。如果要在 scp 命令中使用不同的加密方法,请使用 -c 选项,后跟加密方法的名称。

假设我们在使用scp命令传输文件时要使用3des-cbc加密,请运行以下scp命令:

[root@linuxtechi ~]# scp -c 3des-cbc -r 下载 root@linuxtechi:/root

使用以下命令列出 ssh 和 scp 支持的加密方法:

[root@linuxtechi ~]# ssh -Q 密码 localhost |粘贴 -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 ~]#

本教程就到此为止,有关 scp 命令的更多详细信息,请参阅其手册页。请在下面的评论部分分享您的反馈和意见。


来自:https://www.ydxcj.com/scp-command-examples-in-linux/

作者:Pradeep Kumar 选题:lujun9972 译者:wxy 校对:wxy

本文由LCTT原创编译,Linux中国自豪发布