【问题标题】:How can I keep gnu screen from becoming unresponsive after losing my SSH connection?失去 SSH 连接后,如何防止 gnu 屏幕无响应?
【发布时间】:2017-11-16 17:41:57
【问题描述】:

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

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

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

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

【问题讨论】:

  • 常见问题解答说:“程序员常用的软件工具”。我描述的工具似乎与我相关。

标签: ssh gnu-screen hung


【解决方案1】:

经过大量实验,我能够恢复屏幕会话,如下所示:

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

【讨论】:

    【解决方案2】:

    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) $杀死16305 $屏幕-r

    【讨论】:

    • 我看不到 sshd 进程正在运行——除了屏幕进程和其中运行的 bash shell 之外,似乎没有任何东西可以杀死。正如您所猜测的那样,杀死它们无济于事:/
    • @Mikey:尝试不使用-U $UID。我会感到惊讶,但也许您没有运行具有权限分离的 sshd……
    • 也许cygwin在这方面与linux不同。 “ps -efW”输出和“Process Explorer”输出都缺少 sshd 进程。当 sshd 运行时,它由 cygwin SSH 服务调用,如下所示:“C:\cygwin\usr\sbin\sshd.exe -D -R”。 -D 标志控制是否分离,并且 -R 标志没有出现在手册页上。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-05
    • 2020-09-24
    • 1970-01-01
    • 1970-01-01
    • 2010-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多