当远程系统意外断开连接时,SSH 进程未在远程计算机上终止

J L*_*J L 8 ssh sshd

我有一个我无法找到答案的问题。我有两台电脑,都运行 Ubuntu 12.04。我将一台计算机放在家里,并使用 SSH 从另一台(“远程”)计算机连接到它。远程计算机能够毫无问题地连接到家用计算机。远程计算机还在 /etc/ssh/ssh_config 中将 SetAliveInterval 设置为 60,这样即使我暂时离开计算机也不会断开连接。

有时,我的远程计算机上的互联网连接会中断。Internet 中断导致我的 SSH 隧道关闭(当然)。但是,当我恢复 Internet 连接并使用新的 SSH 隧道重新连接到家用计算机时,我可以看到使用#ps ax旧的 SSH 连接过程仍在运行。这是一个问题,因为我在家用计算机上使用了一个加密的主目录,它不允许文件被重新加密,直到(现在已经死了)SSH 连接被终止。

有没有办法在家用计算机上设置 sshd_config 以便它自动检测连接何时终止并终止它?

小智 5

尝试screentmux。在服务器端,或双方,如果你喜欢:

sudo apt-get install tmux
Run Code Online (Sandbox Code Playgroud)

登录后,启动tmux

tmux
Run Code Online (Sandbox Code Playgroud)

如果连接中断,请通过ssh再次登录并重新连接tmux会话。要发现会话号:

tmux ls
Run Code Online (Sandbox Code Playgroud)

输出可能是这样的:

0:1 个窗口(创建于 2012 年 12 月 25 日星期二 19:20:40)

像这样连接到tmux编号的会话:

tmux attach -t 0
Run Code Online (Sandbox Code Playgroud)

然后你又回到了你离开的地方。您不必终止会话。他们只是在等待您的下一次访问。或者,如果您只想终止会话...

在服务器端,请参阅ClientAliveIntervalClientAliveCountMax/etc/ssh/sshd_config设置。( )man 5 ssh_config

ClientAliveInterval 300
ClientAliveCountMax 0
Run Code Online (Sandbox Code Playgroud)

将它们更改为您的首选项后,重新启动 SSH 服务器。

sudo /etc/init.d/ssh restart
Run Code Online (Sandbox Code Playgroud)

300 是秒(五分钟)。