我想使用 autossh 来维护配置为多路复用的 ssh 会话。这样我就可以在本地主机上编写利用持久 ssh 连接的脚本。我在让 ssh 和 autossh 表现一致时遇到困难,希望有人可以帮助我。
我的 ~/.ssh/config 文件的内容...
Host cg*
ServerAliveInterval 300
ServerAliveCountMax 2
ControlMaster auto
ControlPath ~/.ssh/control:%h:%p:%r
ControlPersist yes
正在创建主 ssh 连接...
$ ssh -fNn jehudson@cg5
$ ps aux | grep ssh
jehudson 11813 0.0 0.1 5744 628 ? Ss 18:42 0:00 ssh -fNn cg5
检查连接是否正在复用...
$ ssh -O check cg5
:
Master running (pid=11813)
在主会话上打开和关闭会话...
$ ssh cg5
$ ...
$ exit
Shared connection to cg5 closed.
这看起来工作正常。现在我想做同样的事情,但使用 autossh。
终止主连接...
$ ssh -O exit cg5
Exit request sent.
通过 autossh 打开连接...
$ autossh -M 0 -fNn jehudson@cg5
$ ps aux | grep autossh
jehudson 11826 0.0 0.1 3660 772 pts/1 S+ 18:45 0:00 grep --color=auto autossh
(!) 嗯,这很奇怪...... autossh 似乎没有启动,或者如果启动了,它很快就会死掉。
$ ps aux | grep ssh
jehudson 11823 0.0 0.1 5744 916 ? Ss 18:45 0:00 ssh: /home/jehudson/.ssh/control:cg5:22:jehudson [mux]
(!?) 看来隧道已打开,但创建后 autossh 没有继续维护它!而这次为什么在流程描述中列出了控制文件呢?
$ ssh -O check cg5
Master running (pid=11823)
显然,多路复用 ssh 会话已建立,但它未被 autossh 监控。
我尝试了 autossh 接受的标志的不同组合,但我找不到打开简单的多路复用 ssh 连接、将其发送到后台并由 autossh 监控的方法。如果您发现我可能错过的内容或者您有建议让我尝试,请告诉我。
答案1
看来autossh
玩得不太好ControlPersist
。如果您保持ControlPersist
启用状态,连接将在持续时间后终止。所以:
autossh -f -M0 -N -oControlPersist=no $DEST