使用 autossh 创建持久的、多路复用的 ssh 连接而不需要任何端口转发?

使用 autossh 创建持久的、多路复用的 ssh 连接而不需要任何端口转发?

我想使用 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

相关内容