如何在没有屏幕或tmux的情况下重新连接到意外断开的ssh会话

lyu*_*lyu 5 ssh session gnu-screen reconnect tmux

我知道这些问题多年来一直被问到,而答案往往是screen或者tmux.screen如果我知道我将离开会话很长时间,或者网络太糟糕而无法保持可靠的连接,我肯定会在开始时使用.

主要的问题是,当我开始一些会话并发现它必须持续很长时间,或者连接只是意外丢失.在后一种情况下,通常当我立即开始另一个会话时,我可以发现之前的进程没有被杀死,但我无法重新连接到他们的终端.

所以我想知道在意外断开ssh会话后很长时间内是否有可能阻止正常进程被杀死.最重要的是我可以重新连接到他们的终端,而不是screen提前启动它们.

如果没有,是否可以将已经启动的裸ssh会话移动到新screen会话中以便以后重新连接?

Spl*_*iFF 4

我不相信没有屏幕之类的东西是不可能的。一旦你的伪 TTY 丢失,我几乎可以肯定它无法从不同的 shell 中恢复(至少在没有一些 narly hack 的情况下)。

至于将现有流程添加到新屏幕,我认为这是可能的。请尝试此处的说明:

http://monkeypatch.me/blog/move-a-running-process-to-a-new-screen-shell.html

首先要做的就是暂停该进程。就我而言,可以通过输入Ctrl+来暂停 Irssi Z

其次,在后台恢复进程:

$ 背景

现在,我们将把进程与其父进程(shell)分离。因此,当父进程终止时,子进程 (Irssi) 将能够继续。为此,我们使用 disown 内置函数:

$ 与 irssi 断绝关系

启动屏幕会话:

$ 屏幕

当我们处于屏幕会话中时,我们将检索 irssi 进程。为此,我们使用带有 pid 的 reptyr 命令:

$ 雷普提尔

为了避免繁琐的 pid 研究,我们可以使用 pgrep 命令:

$reptyr$(pgrep irssi)

现在该进程位于 screen shell 中,我们可以安全地分离我们的会话,不再担心杀死我们的 X 服务器或关闭我们的 ssh 连接。

为此你需要reptyr 。

选项 2:

我怀疑您可能正在尝试解决错误的问题。如果您的 SSH 连接断开,为什么不解决这个问题呢?您可以通过调整连接设置来将 SSH 设置为对超时和断开连接具有极高的容忍度。

在您的客户端上,$HOME/.ssh/config添加:

ServerAliveInterval 60
ServerAliveCountMax 5
Run Code Online (Sandbox Code Playgroud)

现在,即使服务器 5 分钟内没有响应,您的会话也不会超时。