SSH 重用连接

有的时候需要经常 ssh 连接到服务器上,比如,我push一个分支,然后合并并push,然后push tag,然后删除该分支。期间至少需要四次SSH连接(不要问我为什么会有这么复杂的流程。。。)

另外,之前通过跳板机直连线上机器的方法,在差的网络环境中仍然很慢,也在考虑如何加速的问题。

综上,每次SSH连接的建立,需要首先建立TCP连接,然后认证之。有的时候网络慢,搞得这个过程很不爽,故有此文。

ssh_config的文档中有如下ControlMaster和ControlPath两个参数。
ControlMaster表示是否需要多个SSH会话重用一个网络连接,这个当然要开启;ControlPath表示这个网络连接绑定到的本地sock地址。

我的配置如下:

1
2
ControlMaster auto
ControlPath ~/.ssh/%r@%h:%p

time ssh remote_host -C pwd命令为例,在默认配置下,一般执行时间是1s;如果开启了ControlMaster,首次连接的时间是1.2s(事实上,我也不知道为什么会稍微多一点);如果重用了之前的连接,则时间降为0.6s

Tips:

ssh -O check reomte_host可以看到共享的连接是不是还在;
ssh -O exit reomte_host可以直接关闭后台共享的连接(会关闭现有的ssh会话);
ssh -O stop remote_host则表示后台共享的连接不会再接受新的会话(停止监听sock文件,下次的连接仍然会创建同样的sock文件)。

另外ControlPersist表示连接失效时间,也建议设置一个合理的值。

作者

Robert Lu

发布于

2015-10-17

许可协议

评论