节省你的SSH连接时间:ControlMaster 使用指南
背景
最近有需求在远程服务器上频繁传输文件(scp),然后执行一些命令。但是这个远程服务器延迟比较高,而且认证花费的时间比较长,让人非常不耐烦。然后发现了一个可以加快这个步骤的工具:ControlMaster。
来源:
简介
ControlMaster 是 OpenSSH 提供的一个功能,其作用是让多个 SSH 会话共享一个 TCP 连接,这样做有几个好处:
- 减少连接时间:后续的SSH连接可以复用已经建立的连接。
- 减少服务端负载:因为减少了需要处理的TCP连接数量。不过个人感觉这个作用不是很大。
- 减少认证次数:只有第一次连接的时候需要认证。这种方式对于只允许密码登录的服务端来说非常有效。对于采用密钥的服务器来说,如果认证时间很长,节省的时间也会相当可观。
这个功能尤其适合需要频繁进行SSH连接的时候,比如说
- 脚本自动化:脚本中可能经常出现类似
ssh user@host command
的命令,而允许复用连接的话,效率会大大提高。当然,基于 ssh 的其他工具也是适用的,比如说 scp,sftp,也包括基于 ssh 的 git 操作(主要涉及 clone,push,pull,fetch)。 - 网络质量不佳:当网络质量不佳的时候,即使不那么频繁的 ssh 操作,这个功能也可以节省很多时间。当然主要不是时间,毕竟加起来可能也不到一分钟,最主要是等待的过程太烦人了。你也不想每次打开网页,页面都要保持几秒钟的空白吧?
使用方法
文档地址:https://man.openbsd.org/ssh_config#ControlMaster
打开ssh客户端的配置文件,通常是 ~/.ssh/config
Host *
ControlMaster auto
ControlPath ~/.ssh/control-%r@%h:%p
ControlPersist 1h
注:
- 这里的
*
表示对所有主机生效,也可以单独设置。 - auto 是推荐设置,一般用这个就够了。
- Path: 指明连接文件的保存位置。名称推荐至少包含
%r
,%h
,%p
以保证唯一,或者使用%C
。%r
: remote username%h
: remote hostname%p
: remote port%C
: Hash of %l%h%p%r%j- 详情请看文档:https://man.openbsd.org/ssh_config#TOKENS
- Time: 没有后缀就是秒。例子:
- 600: 600 seconds
- 10m: 10 minutes
- 1h30m: 1 hour 30 minutes
- 详情请看文档:https://man.openbsd.org/sshd_config.5#TIME_FORMATS
其他资源:https://docs.rc.fas.harvard.edu/kb/using-ssh-controlmaster-for-single-sign-on/