如何在丢失SSH连接后让gnu屏幕无响应?

时间:2011-01-11 05:19:43

标签: ssh gnu-screen hung

我使用VPN隧道连接到我的工作网络,然后使用SSH连接到运行cygwin的工作PC。登录后,我可以附加到屏幕会话,一切都很好。

现在,过了一会儿,我离开了我的电脑,迟早,VPN隧道超时了。每一端的SSH连接最终会超时,然后我最终回到我的计算机上做一些工作。从理论上讲,这应该只是重新启动VPN,通过SSH重新连接,然后运行“screen -r -d”。

然而,显然当sshd守护进程在cygwin PC上超时时,它会使屏幕会话处于某种挂起状态。我可以通过在运行屏幕会话时单击cygwin bash shell窗口上的关闭框来重现类似的挂起状态。

一旦发生这种情况,有没有办法让屏幕会话恢复,这样我就不会丢失任何东西?

2 个答案:

答案 0 :(得分:5)

通过大量实验,我能够按如下方式恢复屏幕会话:

  1. 查找服务器屏幕进程的PID:ps | grep screen
  2. 向服务器发送HUP信号:kill -1< PID>
  3. 运行屏幕客户端:screen -r -d

答案 1 :(得分:3)

screen阻塞(死)SSH会话的pty。通过查杀sshd来恢复。

假设Linux,并且您目前不在屏幕内:

$ pgrep -U $UID sshd | xargs -rn1 pstree -hp
sshd(16305)───bash(16306)───screen(16670)
sshd(16544)───bash(16545)───xargs(16705)───pstree(16707)
$ kill 16305
$ screen -r