Scp是Secure Copy的缩写。它主要用于通过ssh连接复制文件。复制的文件被加密并假定为ssh安全。如果文件包含敏感数据,用SCP或类似的加密协议复制它们是最好的解决方案。在本教程中,我们将详细介绍如何使用SCP。
使用ssh包安装scp命令
Scp是由Linux发行版中的ssh包提供的。所以要安装 scp
我们将安装ssh,但ssh通常是默认安装的。
Ubuntu、Debian、Mint、Kali
scp
提供了 ssh
包裹。我们将安装 ssh
包装如下 apt install
命令。
$ sudo apt install ssh -y

软呢帽、CentOS、RHEL
我们将使用 dnf
或 yum
包管理器。
$ sudo dnf install ssh -y
或者
$ sudo yum install ssh -y
Scp命令语法
要获得简单快速的帮助,请运行SCP,而不使用以下任何参数。如我们所见,我们使用 scp
命令并提供与连接相关的选项。然后我们将提供一个用户名和远程主机名 @
分隔符。
scp OPTIONS [email protected]_HOST:/FILES_DIRECTORIES [email protected]_HOST:/FILES_DIRECTORIES
- 选项将定义
scp
密码类型、递归、速度、ssh端口和限制等命令。 - USERNAME是远程系统的用户
- SOURCE主机是我们要复制文件和文件夹的主机,这些文件和文件夹将成为源。
- 目标主机是复制源文件和目录的目标主机。
- 文件目录是复制的文件和目录远程系统路径和名称。
Scp命令帮助信息
更详细地了解 帮助 人scp 命令的用法如下。Scp Unix用法与Linux Scp用法没有区别。
$ man scp

使用Scp将远程文件复制到本地系统
我们将用下面的scp命令复制文件。复制文件时,scp将要求提供凭据。
$ scp [email protected]:/home/ismail/Downloads/backup.tar.gz /home/ali
我们已经复制了backup.tar.gz 通过提供 ismail
从本地系统到 /home/ali
. 没有要求输入密码,因为我已经复制了所需的凭据。
相关文章: 如何在Linux下用PGP验证文件和签名?
使用证书身份验证运行不带密码的Scp命令
如果我们想使用 scp
在无密码和更安全的方式下,我们需要设置基于SSH密钥的身份验证。为了建立基于密钥的身份验证,我们需要使用 ssh-keygen
命令如下。
$ ssh-keygen

在创建一个密钥对之后,我们将通过向用户提供以下命令将公钥部署到远程系统。它将询问用户的密码。部署之后,我们可以使用ssh而不需要密码。
$ ssh-copy-id [email protected]
使用Scp将本地文件复制到远程
我们将本地文件复制到远程。正如您将看到的,从远程复制到本地没有什么区别。
$ scp backup.tar.gz [email protected]:/home/ismail/Downloads
-
backup.tar.gz
是要复制到远程的本地文件名。 -
ismail
是我们将在远程服务器上验证的用户名。 -
192.168.122.233
是远程系统的IP地址。 -
/home/ismail/Downlaods
是要复制的远程系统路径。
使用Scp将远程文件复制到本地
或者,我们可以将远程文件和目录复制到本地系统。我们将把远程系统指定为源主机。在指定源主机时,我们可能需要显式地提供用户名。然后我们将指定作为本地系统路径的目标。在本例中,我们将复制名为 test.tar.gz
文件到本地系统路径 /home/ismail
. 我们将使用 ali
作为远程系统用户名。
$ scp [email protected]:/mnt/test.tar.gz /home/ismail/
使用Scp递归复制文件夹
到目前为止,我们已经从远程复制了单个文件。可以使用递归参数复制文件夹及其子文件夹。Recursive参数使得可以递归地复制整个目录。我们将使用 -r
选项。
$ scp -r Downloads 192.168.122.233:/home/ismail/Documents
将多个本地文件复制到远程系统
我们可以用SCP命令将多个本地文件复制到远程系统。我们将只提供源的本地文件名,最后,我们将提供要复制的目标或远程系统。在本例中,我们将复制名为 file1.txt
, file2.txt
和 file3.tar.gz
到远程系统。
$ scp file1.txt file2.txt file3.tar.gz [email protected]:/home/ismail/
复制特定文件类型或扩展名的所有文件
在某些情况下,我们可能只需要复制特定的文件类型或扩展名。我们可以使用bash glob操作符来泛化文件名并设置扩展名。在本例中,我们将使用 *.txt
扩展到远程系统。
$ scp /home/ismail/*.txt [email protected]:/home/ismail
使用Scp复制时压缩文件
Scp在复制时对文件进行加密,这会导致传输性能损失。我们可以通过压缩文件来消除这种性能损失。请记住,文件是为传输而压缩的,而不是完全压缩的。我们将使用 -C
压缩选项。
$ scp -C original-ks.cfg [email protected]:/root/original-ks.cfg
通过提供 -C级 参数我们已经为传输启用了压缩。
为Scp使用不同的SSH端口
Ssh默认运行tcp/22,但有时可能与此不同。Scp也假设ssh 22的端口。我们可以像下面这样改变端口。我们将为端口名提供 -P
选项和端口号。
$ scp -P 2222 original-ks.cfg [email protected]:/root/original-ks.cfg
我们已经提供了 -第 参数和值 </b>2222
.
设置Scp文件传输的带宽限制
如果我们的网络容量或带宽是有限的,或有一些重负载,这是重要的复制文件与Scp将产生额外的负载。我们可能需要限制Scp命令的带宽使用。我们可以使用 -l
选项并提供要为Scp命令设置的带宽。在本例中,我们将带宽使用率设置为100kbps。
$ scp -l 100 Backup.tar.gz 192.168.122.233:/home/ismail/Documents
Scp的详细或调试模式
如果Scp文件传输或连接有问题,我们必须排除故障。因此,我们需要更多关于Scp的信息,其中可以使用 -v
.
$ scp -r -v kafka_2.12-2.2.0 [email protected]:/home/ismail/backup/

向Scp命令传递密码
我们已经设置了基于密钥的无密码身份验证,但我们可能需要将SCP与密码一起使用。在本例中,我们可以使用一个名为sshpass的简单应用程序向SCP提供密码,如下所示。
$ dnf install sshpass
我们已经安装好了。因为它与ssh工具是分开的。
$ sshpass -p "123456" scp original-ks.cfg [email protected]:/root/original-ks.cfg
在这里 -第 密码和 “123456” 是我们的密码。注意,我们的密码不强,很容易被破解。然后我们提供常规的scp命令。
相关文章: 什么是FTP(文件传输协议)?
如何用Scp逃逸路径中的空格
如果本地或远程路径中存在空间,则可能会出现问题。假设我们有一个名为 “测试1“。有两种解决方案
$ scp original-ks.cfg [email protected]:/root/Downloads/test 1/
我们有简单的加法
在文件夹名称的空格之前。
$ scp original-ks.cfg [email protected]:"'/root/Downloads/test 1/'"
我们已经添加了一个单引号和双引号围绕路径如上所述。
SCP性能
我们知道SCP使用了一些加密算法。默认情况下,Scp使用三重DES加密网络流量。三重DES可能会造成一些性能瓶颈,因此更快的Blowfish或aes128 ctr加密算法的使用将加快传输速度。
$ scp -c aes128-ctr tmux.tar ubu1:/home/ismail/backup/
