节省你的SSH连接时间:ControlMaster 使用指南

背景

最近有需求在远程服务器上频繁传输文件(scp),然后执行一些命令。但是这个远程服务器延迟比较高,而且认证花费的时间比较长,让人非常不耐烦。然后发现了一个可以加快这个步骤的工具:ControlMaster。

来源:

简介

ControlMaster 是 OpenSSH 提供的一个功能,其作用是让多个 SSH 会话共享一个 TCP 连接,这样做有几个好处:

  1. 减少连接时间:后续的SSH连接可以复用已经建立的连接。
  2. 减少服务端负载:因为减少了需要处理的TCP连接数量。不过个人感觉这个作用不是很大。
  3. 减少认证次数:只有第一次连接的时候需要认证。这种方式对于只允许密码登录的服务端来说非常有效。对于采用密钥的服务器来说,如果认证时间很长,节省的时间也会相当可观。

这个功能尤其适合需要频繁进行SSH连接的时候,比如说

  1. 脚本自动化:脚本中可能经常出现类似 ssh user@host command 的命令,而允许复用连接的话,效率会大大提高。当然,基于 ssh 的其他工具也是适用的,比如说 scp,sftp,也包括基于 ssh 的 git 操作(主要涉及 clone,push,pull,fetch)。
  2. 网络质量不佳:当网络质量不佳的时候,即使不那么频繁的 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
  • Time: 没有后缀就是秒。例子:

其他资源:https://docs.rc.fas.harvard.edu/kb/using-ssh-controlmaster-for-single-sign-on/