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 小时)以后才退出。