最新消息:阿啰哈,本人90后,目前单身,欢迎妹子们来撩!.(。→‿←。)

如何才能加速scp

Commands 林志斌 1034浏览

scp的优势很多,比如单端口传输,方便快捷。而在内网、高速网络中性能往往受到cpu计算能力的限制无法到达满意的传输效率
这里有三个方法来改善这个问题,当然如果能有更好的方法欢迎补充
因为是加密导致的传输效率不高所以当然是尝试更换加密算法啦

1、使用效率更高但是不怎么安全的加密方法
在内网传输中,假设路由是可信的情况下就不需要担心中间人攻击,于是可以通过-c 参数更换加密算法
就像这样: ssh -c aes192-ctr,这里有一张图表示各种参数的性能:

原始地址http://www.orczhou.com/index.php/2013/11/make-scp-faster-with-cipher-and-compression 
各位可以根据图来选择自己喜欢的算法

2、回滚到rsh
各位都知道ssh本是对r指令集的一个扩充,也就是更安全化的版本,所以当然可以回滚到r指令集啦
在配置文件中找到这样的段:
# Never do this! Security risk!!
Host *
UseRsh yes
把UseRsh打开并在Host中填入信任的ip地址或者区域。这样就可以不用加密了
请参考这里http://docstore.mik.ua/orelly/networking_2ndEd/ssh/ch07_04.htm disable encryption 部分
这里顺便推荐一本书《SSH, The Secure Shell: The Definitive Guide.》 写的非常详尽

3、HPN-ssh
ssh的高性能补丁,支持多核加密,以及很简单的无加密模式。AUR源里面有。好喜爱那个freebsd里面已经默认用这个了
关于高速局域网传输文件,不知道各位在用什么方法,欢迎补充

当需要在机器之间传输400GB文件的时候,你就会非常在意传输的速度了。默认情况下(约125MB带宽,网络延迟17ms,Intel E5-2430,本文后续讨论默认是指该环境),scp的速度约为40MB,传输400GB则需要170分钟,约3小时,如果可以加速,则可以大大节约工程师的时间,让攻城师们有更多时间去看个电影,陪陪家人。

1. 结论

声明:这里给出的测试数据不具有一般性,仅供参考。测试与数据本身特性有很大关系,本文使用InnoDB的redo log作为测试数据。

* 改变ssh加密算法,可以让速度更快;通常,越弱的加密算法,速度越快

通常压缩会降低scp速度,但这与数据类型有很大关系,对压缩率非常高的数据启用压缩,可以加速

* 压缩级别对传输效率影响很小

* 用于完整性校验的不同MAC( message authentication code)算法,对性能约有10%-20%的影响。

所以,简单尝试如下,让你的SCP速度double一下:

scp -r -c arcfour128 ...
scp -r -c aes192-cbc ...
scp -r -c arcfour128 -o "MACs [email protected]" ...

注:启用压缩使用参数: -o "Compression yes"

2. 测试数据:加密算法和压缩的影响

这里对比了12种ssh中实现的加密算法和是否使用压缩的传输效率,测试文件使用的是InnoDB的1GB*4的日志文件(注意:不同类型的文件测试结果会很不同),这里纵坐标单位为MB/s,数据分为压缩传输和不压缩传输两组:

screen-scp-compare-cipher-compression

原始数据:scp_speed.txt

可以看到,不同加密算法传输速度相差很大;使用了压缩之后,速度下降很多,也看到不同加密算法加密后区别并不大。

3. 关于是否启用压缩

* 压缩只有在网络传输速度非常慢,以致于压缩后节省的传输时间大于压缩本身的时间,这时才有效果,所以是否启用压缩,需要实际测试

* 压缩比很低的数据,不要再启用压缩(例如已经压缩过的数据、视频等)

* 通常建议,传输前先压缩,而不是使用ssh的压缩;建议使用pigz/lbizp2等并行压缩工具

* 数据中大量重复、空洞,这类适合压缩的数据,可以尝试压缩选项,例如如下是一组,大量"空洞"数据的测试:

chart_1

看到,压缩大大提高了传输效率

4. "压缩级别"对传输速度影响不大

最后一组对比是,将压缩级别从1改到9,对比传输速度,纵坐标单位MB/s,对12种加密算法分别使用了测试9个压缩级别,数据如下:

screen-scp-compare-compression-level

大图链接 原始数据:scp-compression-level.txt

可以看到,压缩级别对传输影响较小。ssh使用的默认压缩级别是6。

5. 测试数据:完整性校验算法MACs选择

通过选项Macs可以设置对应的哈希算法,man ssh_config可以看到支持哪些哈希算法。这里对了比了12中加密算法下使用不用的完整性校验算法的性能情况:

screen-scp-compare-macs-all

查看大图

看到,绝大数情况下"[email protected]"(关于此哈希)性能都更好,所以建议尝试使用此哈希算法做验证,看看你的场景下速度是否与提升。也可以看到,默认的hmac-md5哈希在默认的加密aes128-ctr下表现比较好;

6. 参考阅读

differenct between -ctr/cbc:介绍了ctr和cbc的区别

The use of UMAC in the SSH Transport Layer Protocol介绍umac相关的哈希算法

* 在<<The Secure Shell: The Definitive Guide>> ISBN: 0-596-00011-1概述了各种加密算法的安全性和效率 参考

* man scp/ssh/ssh_config

OpenSSH ciphers performance benchmark

100% SCP/SSH Performance Gain by Selecting the Right Algorithm

Ciphers and [email protected]

AES VS [email protected] Blogs - ACE Team

via: http://openyoudao.org/%E5%A6%82%E4%BD%95%E6%89%8D%E8%83%BD%E5%8A%A0%E9%80%9Fscp

http://www.orczhou.com/index.php/2013/11/make-scp-faster-with-cipher-and-compression/

转载请注明:林志斌 » 如何才能加速scp

发表评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址