SSH 连接断开后无法重新连接到屏幕会话

SSH 连接断开后无法重新连接到屏幕会话

我之前曾使用 重新连接到长时间运行的屏幕会话screen -dr control。但是,有时此命令不会重新连接到屏幕,而是永远挂起(10 多分钟后我中止了)。这仅在 SSH 连接意外断开时发生,而不是在使用 正确断开屏幕时发生Ctrl-A d。其他开关(例如screen -x或 )screen -D -RR也不起作用。

这个帖子建议终止持有 screen 会话的 PTY,这将导致 screen 完全断开连接。但是,它只会终止screen -dr control调用它的 shell。

例如:

$ ps -ef | grep control | grep -v grep
nomad     7387  7109  0 13:05 pts/50   00:00:00 screen -dr control
nomad    15299     1  0 Nov27 ?        00:13:47 SCREEN -S control

$ ps -ef | grep bash | grep 'pts/50'
nomad     7109  7108  0 12:49 pts/50   00:00:00 -bash

链接的帖子建议杀死bashPID 为 7109 的进程。这也会杀死screen -dr controlPID 为 7387 的进程。之后,我仍然无法连接到屏幕。

SCREEN -S control启动屏幕会话的进程有init其父进程,我显然无法终止它。

有没有办法重新连接到挂起的屏幕会话?

更新:这种情况发生在使用内核 2.6.32-358.6.1.el6.x86_64 的 CentOS 6.4 上。所有 shell 都是 bash 版本 4.1.2(1)-release。

答案1

我认为你应该尝试

screen -DR 

下次也是如此 - 愤怒的(大写)调用应该迫使它断开由中间 netcat 跳跃持有的其他会话。

答案2

根据 Jens Timmerman 的建议,这种奇怪行为的根本原因是我使用 SSH ProxyCommand 和 连接到远程服务器ncat。在中间机器上终止后ncat,我能够重新连接到屏幕会话。

答案3

如果这是一个常见的问题,你也可以考虑使用 mosh 作为 ssh 的替代品:

http://mosh.mit.edu

相关内容