10个SCP命令在Linux中传输文件/文件夹

SCP代表安全复制命令用于以安全的方式在服务器之间复制文件/文件夹。本文显示10个scp命令与实践示例。

Linux的管理员应该熟悉CLI环境。 由于Linux服务器GUI模式是不是要安装一个常见的。SSH可能是最流行的协议,以使Linux的管理员通过以安全的方式远程管理的服务器。 内置有SSH命令有SCP命令。SCP用于复制服务器之间的文件(S)以安全的方式。
Linux SCP命令

10 Linux SCP命令

下面的命令将读为“ 复制source_file_name”变成“destination_folder”“destination_host”使用“ 用户名帐户 ”。
SCP的基本语法
scp source_file_name username@destination_host:destination_folder
有在SCP命令参数很多,你可以使用。以下是可用于每日使用的参数。

使用-v参数提供SCP进程的详细信息

不带参数基本SCP命令将文件复制背景。 用户将看不到任何东西,除非进程完成或出现一些错误。 你可以用“-V”参数来打印调试信息到屏幕。它可以帮助您调试连接,身份验证和配置问题。
pungki@mint ~/Documents $ scp -v Label.pdf mrarianto@202.x.x.x:.
示例输出
Executing: program /usr/bin/ssh host 202.x.x.x, user mrarianto, command scp -v -t .
OpenSSH_6.0p1 Debian-3, OpenSSL 1.0.1c 10 May 2012
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to 202.x.x.x [202.x.x.x] port 22.
debug1: Connection established.
debug1: Host '202.x.x.x' is known and matches the RSA host key.
debug1: Found key in /home/pungki/.ssh/known_hosts:1
debug1: ssh_rsa_verify: signature correct
debug1: Next authentication method: password
mrarianto@202.x.x.x's password:
debug1: Authentication succeeded (password).
Authenticated to 202.x.x.x ([202.x.x.x]:22).
Sending file modes: C0770 3760348 Label.pdf
Sink: C0770 3760348 Label.pdf
Label.pdf 100% 3672KB 136.0KB/s 00:27
Transferred: sent 3766304, received 3000 bytes, in 65.2 seconds
Bytes per second: sent 57766.4, received 46.0
debug1: Exit status 0

从原始文件提供修改时间,访问时间和模式

“-p”参数将帮助你在这。估计的时间和连接速度将出现在屏幕上。
pungki@mint ~/Documents $ scp -p Label.pdf mrarianto@202.x.x.x:.
示例输出
mrarianto@202.x.x.x's password:
Label.pdf 100% 3672KB 126.6KB/s 00:29

使用-C参数使文件传输更快

一个参数,可以更快的文件传输是“-C”参数。 在“-C”参数将压缩在旅途中您的文件。唯一的事情是压缩只发生在网络中。当文件到达目标服务器时,它将返回到原始大小,就像压缩发生之前一样。 看看这些命令。它使用93兆的单个文件。
pungki@mint ~/Documents $ scp -pv messages.log mrarianto@202.x.x.x:.
示例输出
Executing: program /usr/bin/ssh host 202.x.x.x, user mrarianto, command scp -v -p -t .
OpenSSH_6.0p1 Debian-3, OpenSSL 1.0.1c 10 May 2012
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to 202.x.x.x [202.x.x.x] port 22.
debug1: Connection established.
debug1: identity file /home/pungki/.ssh/id_rsa type -1
debug1: Found key in /home/pungki/.ssh/known_hosts:1
debug1: ssh_rsa_verify: signature correct
debug1: Trying private key: /home/pungki/.ssh/id_rsa
debug1: Next authentication method: password
mrarianto@202.x.x.x's password:
debug1: Authentication succeeded (password).
Authenticated to 202.x.x.x ([202.x.x.x]:22).
debug1: Sending command: scp -v -p -t .
File mtime 1323853868 atime 1380425711
Sending file timestamps: T1323853868 0 1380425711 0
messages.log 100% 93MB 58.6KB/s 27:05
Transferred: sent 97614832, received 25976 bytes, in 1661.3 seconds
Bytes per second: sent 58758.4, received 15.6
debug1: Exit status 0
复制文件,而无需“-C”参数将导致1661.3秒 。 低于该使用“-C”参数哟可比较的结果的指令。
pungki@mint ~/Documents $ scp -Cpv messages.log mrarianto@202.x.x.x:.
示例输出
Executing: program /usr/bin/ssh host 202.x.x.x, user mrarianto, command scp -v -p -t .
OpenSSH_6.0p1 Debian-3, OpenSSL 1.0.1c 10 May 2012
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to 202.x.x.x [202.x.x.x] port 22.
debug1: Connection established.
debug1: identity file /home/pungki/.ssh/id_rsa type -1
debug1: Host '202.x.x.x' is known and matches the RSA host key.
debug1: Found key in /home/pungki/.ssh/known_hosts:1
debug1: ssh_rsa_verify: signature correct
debug1: Next authentication method: publickey
debug1: Trying private key: /home/pungki/.ssh/id_rsa
debug1: Next authentication method: password
mrarianto@202.x.x.x's password:
debug1: Enabling compression at level 6.
debug1: Authentication succeeded (password).
Authenticated to 202.x.x.x ([202.x.x.x]:22).
debug1: channel 0: new [client-session]
debug1: Sending command: scp -v -p -t .
File mtime 1323853868 atime 1380428748
Sending file timestamps: T1323853868 0 1380428748 0
Sink: T1323853868 0 1380428748 0
Sending file modes: C0600 97517300 messages.log
messages.log 100% 93MB 602.7KB/s 02:38
Transferred: sent 8905840, received 15768 bytes, in 162.5 seconds
Bytes per second: sent 54813.9, received 97.0
debug1: Exit status 0
debug1: compress outgoing: raw data 97571111, compressed 8806191, factor 0.09
debug1: compress incoming: raw data 7885, compressed 3821, factor 0.48
正如你所看到的,当您使用的压缩,传输过程中162.5秒完成。 它比不使用“-C”参数快10倍。 如果您要复制在网络上大量的文件,“-C”参数会帮助你减少你所需要的总时间。 我们应该注意到,压缩方法不会对任何文件工作。当源文件已经压缩时,您将找不到任何改进。文件例如.zip,.rar 图片.iso文件将不会受到“-C”参数。

选择另一个密码加密文件

在默认情况下使用SCP“AES-128”对文件进行加密。 如果要更改为另一个密码进行加密,可以使用“-c”参数。看看这个命令。
pungki@mint ~/Documents $ scp -c 3des Label.pdf mrarianto@202.x.x.x:.
mrarianto@202.x.x.x's password:
Label.pdf 100% 3672KB 282.5KB/s 00:13
上面的命令告诉SCP使用3DES算法来加密文件。 该参数使用“-c”而不是“-C”请小心。

限制带宽使用

另一个参数是可能有用的是“-l”参数。 的“-l”参数会限制使用的带宽。 如果你做一个自动化脚本复制大量的文件这将是有用的,但你不想要的带宽由SCP过程中排出。
pungki@mint ~/Documents $ scp -l 400 Label.pdf mrarianto@202.x.x.x:.
mrarianto@202.x.x.x's password:
Label.pdf 100% 3672KB 50.3KB/s 01:13
背后的“-l”参数400值意味着我们限制了SCP过程只有50 KB /秒的带宽。 有一点要记住,带宽以千比特 / (Kbps)的规定。 这是否意味着8位 ,1个字节等于。 而SCP千字节 / (KB /秒 )计算。 所以,如果你想限制你的SCP最大的只有50 KB / s的带宽,你需要将其设置为50×8 = 400。

指定要与SCP一起使用的特定端口

通常SCP正在使用端口22作为默认端口。 但出于安全原因,您可以将端口更改为另一个端口。 例如,我们正在使用的端口2249。然后命令应该这样。
pungki@mint ~/Documents $ scp -P 2249 Label.pdf mrarianto@202.x.x.x:.
mrarianto@202.x.x.x's password:
Label.pdf 100% 3672KB 262.3KB/s 00:14
请确保它使用大写字母“P”没有“P”,因为“P”已用于保存时间和模式。

递归复制目录中的文件

有时候我们需要目录和所有文件 / 目录拷贝里面。 这将是更好,如果我们能在1个指令去做。SCP支持使用“-r”参数的情况。
pungki@mint ~/Documents $ scp -r documents mrarianto@202.x.x.x:.
mrarianto@202.x.x.x's password:
Label.pdf 100% 3672KB 282.5KB/s 00:13
scp.txt 100% 10KB 9.8KB/s 00:00
当复制过程完成后,在目标服务器上,你会发现一个名为“ 文档 ”的所有目录它的文件。 会自动创建文件夹“ 文件 ”。

禁用进度表和警告/诊断消息

如果您选择不看到SCP进度表和警告/诊断信息,您可以使用“-q”参数禁用它。这里是例子。
pungki@mint ~/Documents $ scp -q Label.pdf mrarianto@202.x.x.x:.
mrarianto@202.x.x.x's password:
pungki@mint ~/Documents $
如您所见,输入密码后,没有任何有关SCP进程的信息。过程完成后,您将再次看到提示。

使用SCP通过代理复制文件

代理服务器通常在办公环境中使用。本地,SCP不是代理配置的。当你的环境使用代理,你必须“告诉”SCP与代理通信。 这里的场景。代理服务器地址为10.0.96.6和代理端口为8080。 代理还实现了用户认证。 首先,您需要创建“ 的〜/ .ssh / config中”文件。第二个你把这个命令放在里面。
ProxyCommand /usr/bin/corkscrew 10.0.96.6 8080 %h %p ~/.ssh/proxyauth
然后,你需要创建文件“ 的〜/ .ssh / proxyauth”包含。
myusername:mypassword
之后,你可以像往常一样透明地做SCP。 请注意,您的系统上可能尚未安装开瓶器。在我的Linux Mint上,我需要首先安装它,使用标准的Linux Mint安装过程。
$ apt-get install corkscrew
对于其他基于yum的系统,用户可以使用以下yum命令安装开瓶器。
# yum install corkscrew
另一件事,既然“ 的〜/ .ssh / proxyauth”文件中包含明文格式的“ 用户名 ”和“ 密码 ”,请确保该文件可以由您才可以访问。

选择不同的ssh_config文件

对于经常在公司网络和公共网络之间切换的移动用户,将总是改变SCP中的设置。这是更好,如果我们可以把不同的ssh_config文件以符合我们的需要。
这里有一个示例场景
代理在公司网络中使用,但不在公共网络中,并且您定期切换网络。
pungki@mint ~/Documents $ scp -F /home/pungki/proxy_ssh_config Label.pdf
mrarianto@202.x.x.x:.
mrarianto@202.x.x.x's password:
Label.pdf 100% 3672KB 282.5KB/s 00:13
默认每用户“ssh_config中 ”的文件将被放置在“ 的〜/ .ssh /配置 ”。 创建具有代理兼容的特殊“ssh_config中 ”的文件,会使你更容易在网络之间切换。 当你在公司网络上,你可以使用“-F”参数。 当你的公共网络上,则可以跳过“-F”参数。 这是所有关于SCP。 你可以看到SCP手册页了解更多详情。请随时留下评论和建议。