我想使用 autossh 来维护配置为多路复用的 ssh 会话。这样我就可以在我的本地主机上编写脚本来利用持久的 ssh 连接。我无法让 ssh 和 autossh 保持一致的行为,我希望有人能帮助我。
我的 ~/.ssh/config 文件的内容...
Host cg*
ServerAliveInterval 300
ServerAliveCountMax 2
ControlMaster auto
ControlPath ~/.ssh/control:%h:%p:%r
ControlPersist yes
Run Code Online (Sandbox Code Playgroud)
正在创建主 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 监视的方法。如果您看到我可能遗漏的内容,或者您有建议让我尝试,请告诉我。
小智 5
看来autossh与ControlPersist. 如果您保持ControlPersist启用状态,则连接将在持久期后终止。所以:
autossh -f -M0 -N -oControlPersist=no $DEST