Linux scp命令

时间:2020-02-23 14:37:35  来源:igfitidea点击:

SCP(安全副本)命令是用于安全地复制主机之间的文件/目录的Linux实用程序。
它使用SSH(Secure Shell)来传输和验证用户。
因此,就像使用SSH时,我们必须知道远程主机的凭据。

如果我们熟悉用于复制文件和目录的Linux CP命令,则SCP并不不同。
唯一添加的和有用的参数是远程目标主机名。
看看下面的语法。 scp file_name_to_copy username@destination_host:destination_directory_path在Destination_host参数中,我们需要输入远程主机的IP地址。

在Linux中使用SCP命令的最佳方法

在本文中,我们将查看15个有用的SCP命令,我们可以在日常与Linux系统中的互动中使用。
我们将使用Ubuntu 18.04 LTS服务器虚拟机作为远程主机。

1.将单个文件从本地计算机复制到远程主机

它是最简单的命令之一。
我在本地计算机上有一个名为hello.scp的文件,我们将要复制到我们的远程主机。
请参阅下面的命令。 scp Hello.scp [email protected]:/home/tuts/theitroad

将单个文件从本地主机复制到远程主机

在右侧,我们有我们的localhost,左侧是我们的Ubuntu服务器。
如果我们是第一次这样做,我们应该看到警告,询问我们是否要继续连接,请执行"是"。
我们应该看到输入远程主机密码的提示。
通过在远程主机上执行LS命令,我们看到我们已成功复制了我们的文件。

2.复制多个文件

在上一个命令中,我们已经看到了我们如何复制一个文件。
要复制多个文件,请使用下面的命令中的语法。
我们将复制三个文件,hello1,hello2和hello3. scp Hello1 Hello2 Hello3 [email protected]:/home/tuts/theitroad

通过在远程主机上运行ls命令,我们看到我们已成功复制文件。

3.递归复制目录

除文件之外,我们可以使用SCP将目录从本地计算机复制到远程目标。
在下面的命令中使用语法。
我们将复制文件夹,theitroadtuts。 scp -r theitroadTUTS [email protected]:/home/tuts/theitroad

注意,在对整个目录上执行任何操作时,我们将需要包含-r参数,该参数代表递归。

4.用详细输出复制文件

在我们的SCP语法中包含一个冗长的参数,打印所有进程SCP在后台正在进行。
让我们使用-v(verbose)参数将多个文件复制到远程主机。 scp Hello1 Hello2 Hello3 [email protected]:/home/tuts/theitroad

5.在两个远程主机上复制文件

假设我们正在管理多个远程服务器,并且我们希望将文件从一个服务器复制到另一个服务器。
查看以下命令中的语法。 scp [email protected]:/home/tuts/theitroad/Hello1 [email protected]:/home/tuts/theitroad

我们正在将文件Hello1从主机192.168.43.96复制到主机192.168.83.132.

6.压缩和复制文件

要加快复制过程并保存带宽,可以使用-c参数压缩文件。
数据在本地计算机上压缩并在远程主机上解压缩。
请参阅下面的语法。 scp -vC Hello1 [email protected]:/home/tuts/theitroad

我们已将-v(verbose)参数包含在内,以便我们可以看到发生的事情。

7.管理带宽

将文件复制到远程主机可以解释为上传。
如果上传带宽高,则可能会影响在后台运行的其他进程。
我们可以使用-l参数限制在复制过程中使用的带宽。
请参阅下面的命令。 scp -l 100 Hello1 [email protected]:/home/tuts/theitroad

我们分配的带宽是千字节。
因此,在上面的命令中,我们使用最多100kb/s来携带我们的复制过程。

8.使用自定义端口编号

如上所述,SCP使用SSH执行复制文件的过程。
默认情况下,SSH在端口22上运行;但是,如果在远程服务器上配置了SSH服务器以在不同的端口上运行,则可以在SCP命令中指定此项。
请参阅下面的命令。 scp -P 22 Hello1 [email protected]:/home/tuts/theitroad

由于我没有配置任何SSH服务器,因此我们将使用默认的22。

9.复制和保留文件属性

如果要复制文件并保留像权限,修改次数,访问时间等的属性,请使用scp命令使用-p参数。
请参阅下面的命令。 scp -P 22 Hello1 [email protected]:/home/tuts/theitroad

注意,在此示例中,"P"是一个小写,与使用自定义端口号时。

10.使用-Q参数抑制SCP输出

假设我们不想打印SCP输出,错误通知,警告甚至进度计。
我们可以使用-q参数实现它,该参数抑制所有SCP输出。 scp -q Hello1 [email protected]:/home/tuts/theitroad

从上面的图像中,唯一的SCP输出是密码提示。
-Q参数抑制所有其他输出。

11.使用SCP将文件从远程主机复制到本地计算机。

对于上面的大多数示例,我们将从本地计算机复制到远程服务器的文件。
现在,假设我们要将文件从远程服务器复制到本地计算机。
我们应该在通常的语法中使用scp命令一点调整。
看下面的命令。 scp [email protected]:/home/tuts/theitroad/serverFile.txt /home/tuts/theitroad

使用SCP将文件从远程主机复制到本地计算机。

通过在本地计算机上运行ls命令,我们看到'serverfile.txt'已成功复制。

12.复制文件和目录而不使用密码

从上面的示例中,我们看到,只要我们需要复制文件,我们就会提示输入密码。
我们可以通过在身份验证过程中生成SSH键来跳过此步骤。

要生成SSH密钥,请使用下面的命令。 ssh-keygen -t rsa系统应该生成一个SSH键。
我们可以从终端中的输出中看到发生的过程。
现在,我们需要将密钥复制到我们的远程主机以用于身份验证。
使用下面的命令。 ssh-copy-id [email protected]

现在让我们尝试将文件从本地计算机复制到我们的远程主机。 scp Hello1 [email protected]:/home/tuts/theitroad

13.使用不同的密码

SCP使用AES密码/加密安全复制文件。
但是,我们可以使用-c参数指定不同的密码方案。
注意,C是与压缩不同的小写,其中C是大写的。
请参阅下面的命令。 scp -c [email protected] TESTFILE [email protected]:/home/tuts/theitroad

我们已经指定了我们想要用作AES的加密方案。
我们也可以使用像河豚等别人等等。 scp -c blowfish TESTFILE [email protected]:/home/tuts/theitroad

14.使用SSH密钥文件而不是密码

SCP允许我们使用密钥文件而不是密码使用-i参数后跟键文件完成身份验证过程。
请参阅下面的命令。 scp -c privateKey.pem TESTFILE [email protected]:/home/tuts/theitroad

15.使用SCP shell脚本复制文件

假设我们必须定期使用SCP命令,我们可以编写Shell脚本以简化整个过程。
在本文中,我们将写一个读取从destfile.txt读取目标主机的脚本。

destfile.txt文件

以下是我们的SCP脚本

echo "STARTING SCP SCRIPT"
echo
echo -e "Enter the path to the file you wish to copy:\c"
read file
for dest in `cat /tmp/destfile.txt`; do
scp -rC $file ${dest}:/tmp/
done

使用".sh"保存文件。
扩展以来它是Bash脚本。
使用chmod命令进行脚本可执行,如下面的图像所示,在执行它之前。