如何让 scp 运行得更快?

mis*_*sha 4 networking scp

我使用以下命令通过我的家庭网络传输文件(当我必须传输大量文件时,我通常使用该tar实用程序将它们存档):

scp -c blowfish [FILE] [USER]@[ADDRESS]:[PATH]
Run Code Online (Sandbox Code Playgroud)

将 500 Mb 的数据发送到另一台计算机大约需要 25 分钟。平均速度约为 600 KB/s。我认为绝对必须有一种方法可以使过程更快,因为我不相信我能够在不到 10 分钟的时间内轻松地从 Web 上提取 1 Gb 文件,但我无法获得 500 Mb文件在更短的时间内通过网络发送。

and*_*.46 7

两个想法:

  1. 尝试不同的密码
  2. 使用“即时”压缩

1. 尝试不同的密码:

一种想法是测试各种可用的密码,scp并尝试确定哪种密码对您来说最快。(这背后的想法是,它是占用时间的数据加密。)通过运行以下命令找到可用的密码:

andrew@athens:~$ ssh -Q cipher
3des-cbc
blowfish-cbc
cast128-cbc
arcfour
arcfour128
arcfour256
aes128-cbc
aes192-cbc
aes256-cbc
rijndael-cbc@lysator.liu.se
aes128-ctr
aes192-ctr
aes256-ctr
aes128-gcm@openssh.com
aes256-gcm@openssh.com
chacha20-poly1305@openssh.com
andrew@athens:~$ 
Run Code Online (Sandbox Code Playgroud)

这显示了默认 Xenial Xerus 安装上的可用密码,并且可以使用您已经建议的语法添加:

scp -c <cipher> [FILE] [USER]@[ADDRESS]:[PATH]
Run Code Online (Sandbox Code Playgroud)

此选项直接传递给ssh因此测试ssh可用密码。希望您能找到一种可以提高传输速度的密码,当您找到此密码后,您可以将其放入~/.ssh/config而不是每次都输入...

2. 使用“即时”压缩:

scp能够“即时”压缩您的传输,这意味着压缩仅在传输期间使用,不会在主机或远程端看到。在使用-C选项中添加它:

scp -c <cipher> -C [FILE] [USER]@[ADDRESS]:[PATH]
Run Code Online (Sandbox Code Playgroud)

这是我自己系统上的示例:

debug1: compress outgoing: raw data 365865, compressed 150118, factor 0.41
debug1: compress incoming: raw data 150118, compressed 365865, factor 2.44
Run Code Online (Sandbox Code Playgroud)

压缩级别与用于的相同gzip,如果您真的想进行实验,可以使用“CompressionLevel”选项,该选项从 1 到 9 不等,1 是最快的压缩,9 是最慢的压缩最佳,6 是最慢的默认。这可以设置~/.ssh/config如下:

Host *
Compression yes
CompressionLevel 9
Run Code Online (Sandbox Code Playgroud)

请记住,这会为所有 scp / ssh传输设置高压缩率,如果您愿意,可以为单个主机设置...

使用该-v选项调查您所做的任何更改的影响。您会通过实验注意到不同的数据将具有不同的压缩率。

  • 我[一次](http://ubuntuforums.org/showthread.php?t=2271473&amp;p=13255758#post13255758)做了很多实验,发现使用 arcfour 密码对我的情况带来了最大的改进(双倍)。 (2认同)