OpenSSH 中复用 SSH 连接

2018-01-07

Xshell 有一个很方便的功能 “Duplicate SSH channel”:

它可以重用旧连接复制 tab,在新 tab 中不需要重新输入密码,在不使用密钥的场合非常方便。

看起来,同一个 SSH 连接可以同时运行多个终端。那么,在 OpenSSH 里怎么做呢?通过简单的配置也可以实现:

Host my1
  ControlPath /tmp/ssh.%h.%p.%r.%l.sock
  ControlMaster auto
  ControlPersist 3600

将以上代码放到 ~/.ssh/config 文件,其中 my1 是我需要频繁登录的服务器。

以后,当我敲下 ssh my1 时,ssh 会检查 /tmp/ssh.my1.22.x.x.sock 是否存在(配置中的路径中的 %h 由实际值替换,用这种方式,可以方便地多个 host 利用),如果是,说明已经有一个连接,直接复用此连接。如果不是,它自己建立一个新连接,并且 fork 一个进程到后台负责管理此连接,监听 /tmp/ssh.my1.22.x.x.sock,以后有新的连接时将可直接利用。

ControlPersist 3600 的含义是前台 ssh 退出以后,后台进程将继续监听,等待新的前台 ssh,直到空闲超过 3600 秒(1 小时)以后才退出。