在Linux中使用SCP命令传输数据的15种方法
如果您使用Linux CP命令复制文件和文件夹,那么您会发现SCP并没有太大不同。主要的附加参数是远程目标主机名。我们深入研究了在系统之间传输数据时有效使用SCP命令的最佳方法。
一般来说,当你想把文件和文件夹从一台服务器/本地主机复制到另一台服务器/本地主机时,你需要使用Samb(SMB)或NFS等文件共享服务。尽管它们很可靠,但在一次性复制文件时,使用它们是一个繁琐的过程。
那是因为你需要设置和配置一个Samba或NFS服务器。这这就需要理解和使用SCP Linux命令。
SCP (Secure Copy)命令是一个Linux实用程序,用于在主机之间安全地复制文件/目录。它使用SSH(安全Shell)传输和验证用户。因此,就像使用SSH一样,您需要知道远程主机的凭据。
如果您精通用于复制文件和文件夹的Linux CP命令,那么SCP并没有太大不同。唯一添加且有用的参数是远程目标主机名。看一下下面的命令。
scp file_name_to_copy username @ destination_host:destination_directory_path
在destination_host参数中,您需要输入远程主机的IP地址。如果您不知道如何找到它,请在终端上运行ipconfig命令。
在Linux中使用SCP命令的最佳方法
在本文中,我们将研究15个有用的SCP命令,您可以在与Linux系统的日常交互中使用它们。我们将使用Ubuntu 18.04 LTS Server服务器作为我们的远程主机。
1.将一个文件从本地计算机复制到远程主机
这是最直接的命令之一。我的本地计算机上有一个名为Hello.scp的文件,我们将其复制到远程服务器上。请参阅下面的命令:
scp Hello.scp tuts@192.168.83.132:/ home / tuts / FOSSLINUX
将单个文件从本地主机复制到远程主机
右侧是localhost本地主机,左侧是Ubuntu Server服务器。如果您是第一次这样做,则应该看到一条警告消息,询问您是否要继续连接,请键入“ yes”。您应该看到提示输入远程主机密码的提示。通过在远程主机上执行ls命令,我们看到我们已经成功复制了文件。
2.复制多个文件
在上一个命令中,我们看到了如何复制单个文件。要复制多个文件,请使用以下命令中的语法。我们将复制三个文件Hello1,Hello2和Hello3。
scp Hello1 Hello2 Hello3 tuts@192.168.83.132:/ home / tuts / FOSSLINUX
复制多个文件
通过在远程主机上运行ls命令,我们看到我们已经成功复制了文件。
3.递归复制目录
除了文件,我们还可以使用SCP将目录从本地计算机复制到远程目标。使用以下命令中的语法。我们将复制文件夹FOSSTUTS。
scp -r FOSSTUTS tuts@192.168.83.132:/ home / tuts / FOSSLINUX
使用SCP命令复制目录
注意,在整个目录上执行任何操作时,我们将需要包含-r参数,该参数表示递归。
4.复制具有详细输出的文件
在我们的SCP语法中包含一个详细参数会打印出SCP在后台执行的所有过程。让我们使用-v(详细)参数将多个文件复制到我们的远程主机。
scp Hello1 Hello2 Hello3 tuts@192.168.83.132:/ home / tuts / FOSSLINUX
复制带有详细输出的文件
从上图可以看到,我们在本地计算机上运行的命令有很多输出。它为您提供了有关当前执行的操作的所有详细信息。
5.在两个远程主机之间复制文件
假设您要管理多个远程服务器,并且要将文件从一台服务器复制到另一台服务器。查看下面命令中的语法。
scp tuts@192.168.43.96:/ home / tuts / FOSSLINUX / Hello1 tuts@192.168.83.132:/ home / tuts / FOSSLINUX
跨两个远程主机复制文件
我们正在将文件Hello1从主机192.168.43.96 复制到主机192.168.83.132。
6.压缩和复制文件
为了加快复制过程并节省带宽,可以使用-C参数压缩文件。数据将在本地计算机上即时压缩,并在远程主机上解压缩。请参见下面的语法。
scp -vC Hello1 tuts@192.168.83.132:/ home / tuts / FOSSLINUX
压缩和复制文件
我们包含了-v(详细)参数,以便您可以查看正在发生的情况。
7.管理带宽
将文件复制到远程主机可以解释为上载。如果上传带宽很高,则可能会影响在后台运行的其他进程。您可以使用-l参数限制在复制过程中使用的带宽。请参阅下面的命令。
scp -l 100 Hello1 tuts@192.168.83.132:/ home / tuts / FOSSLINUX
管理带宽
您分配的带宽以千字节为单位。因此,在上面的命令中,我们使用最大100Kb / s的速度进行复制过程。
8.使用自定义端口号
如上文所述,SCP使用SSH来执行文件复制过程。默认情况下,SSH在端口22上运行;但是,如果将远程服务器上的SSH服务器配置为在其他端口上运行,则可以在SCP命令中指定此端口。请参阅下面的命令。
scp -P 22 Hello1 tuts@192.168.83.132:/ home / tuts / FOSSLINUX
在SCP中使用自定义端口号
由于我尚未配置任何SSH服务器,因此本文的端口号保留为22。
9.复制和保留文件属性
如果要复制文件并保留权限,修改时间,访问时间等属性,请在SCP命令中使用-p参数。请参阅下面的命令。
scp -P 22 Hello1 tuts@192.168.83.132:/ home / tuts / FOSSLINUX
复制并保留文件属性
请注意,在此示例中,“ p”是小写字母,与使用自定义端口号不同。
10.使用-q参数抑制SCP输出
假设您不想打印SCP输出,错误通知,警告甚至进度表。您可以使用-q参数来实现它,该参数禁止显示所有SCP输出。
scp -q Hello1 tuts@192.168.83.132:/ home / tuts / FOSSLINUX
使用-q参数抑制SCP输出。
在上图中,唯一的SCP输出是密码提示。-q参数禁止所有其他输出。
11.使用SCP将文件从远程主机复制到本地计算机。
对于上面的大多数示例,我们将文件从本地计算机复制到远程服务器。现在,假设您要将文件从远程服务器复制到本地计算机。您应该在常规语法中对SCP命令进行一些调整。查看下面的命令。
scp tuts@192.168.83.132:/home/tuts/FOSSLINUX/serverFile.txt / home / tuts / FOSSLINUX
使用SCP将文件从远程主机复制到本地计算机。
通过在本地计算机上运行ls命令,我们可以看到“ serverFile.txt”已成功复制。
12.复制文件和目录而不使用密码
从上面的示例中,我们看到,每当需要复制文件时,都会提示您输入密码。我们可以通过生成在身份验证过程中使用的SSH密钥来跳过此步骤。
要生成SSH密钥,请使用以下命令。
ssh-keygen -t rsa
系统应生成一个SSH密钥。您可以从终端的输出中看到正在发生的过程。现在,我们需要将密钥复制到我们的远程主机以用于身份验证。使用下面的命令。
ssh-copy-id root@192.168.4.200
生成SSH密钥
现在,让我们尝试将文件从本地计算机复制到远程主机。
scp Hello1 tuts@192.168.83.132:/ home / tuts / FOSSLINUX
复制没有密码的文件
从上面的图片中,我们看到没有提示输入密码。
13.使用其他密码
SCP使用AES密码/加密来安全地复制文件。但是,可以使用-c参数指定其他密码方案。注意,c是小写字母,与压缩不同,其中c是大写字母。请参阅下面的命令。
scp -c aes128-gcm@openssh.com TESTFILE tuts@192.168.83.132:/ home / tuts / FOSSLINUX
使用其他密码
我们已经指定了要用作AES的加密方案。您还可以使用河豚鱼等其他食物。
scp -c blowfish TESTFILE tuts@192.168.83.132:/ home / tuts / FOSSLINUX
14.使用SSH密钥文件代替密码
SCP允许您使用-i参数和密钥文件来使用密钥文件而不是密码来完成身份验证过程。请参阅下面的命令。
scp -c privateKey.pem TESTFILE tuts@192.168.83.132:/ home / tuts / FOSSLINUX
使用密钥文件代替密码
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命令使脚本可执行,如下图所示。
使用SCP Shell脚本
总结
这些是15个SCP实用示例,您可以应用这些示例来简化Linux系统的工作。