类似 SSH 的会话可以在物理网络断开后继续存在

类似 SSH 的会话可以在物理网络断开后继续存在

我希望我的 SSH 登录会话在计算机进入睡眠和唤醒状态后保持连接。据我了解,TCP 可以在间歇性网络问题中生存,那么我可以更改设置以使其能够生存几个小时或几天吗?如果没有的话,有没有类似 SSH 的东西可以做到这一点?

我了解我可以将 SSH 设置为在网络再次可用时自动重新连接。但这并不理想,因为我希望我的登录会话与笔记本电脑进入睡眠状态之前的位置完全相同(即使是在 shell 命令行中键入内容的一半)。

我了解还有其他解决方法,但我希望有一种方法可以避免首先丢失 shell 会话。

答案1

TCP 连接应该能够在断开连接后继续存在,但一些过于热心的防火墙可能会丢弃空闲连接,并且如果发生这种情况,它也无法在 IP 地址更改后继续存在。

对于交互式会话,我会运行莫什。它通过 UDP 实现类似 SSH 的终端连接,支持在必要时从另一个 IP 地址重新连接,并且具有一些支持不稳定连接的功能。

无论您决定使用 SSH 还是 Mosh,都可以使用屏幕或者多路复用器也使您的会话独立于连接。

答案2

screentmux绝对是可行的方法。ssh连接就只是达到目的的一种手段,空闲时断线的频率(在合理范围内)不再重要。

如果您担心screen在登录远程服务器时必须记住启动,那么让交互式会话自动加入现有会话screen或启动新会话(如果还没有正在运行的会话)并不那么困难。

答案3

岩石(Reliable sOCketS) 是建立客户端 TCP 连接的程序的包装器,它可以检测 TCP 连接何时失败并自动重新连接客户端,即使客户端已移动到其他网络也是如此。论文里有描述过可靠的网络连接并且是可供下载。它没有维护,但它使用相当稳定的接口,所以它今天应该仍然可以工作。它使用库预加载 ( LD_PRELOAD) 来隐藏标准库函数,因此它仅适用于动态链接的可执行文件。你只需将其运行为

rocks ssh …

Rocks 处理客户端移动性,而不是服务器移动性。如果服务器移动,您可能需要用袜子代理人。

对于交互式会话,一个不错的选择是莫什。它专为不可靠的连接而设计,并支持客户端移动性。如果连接不可靠,Mosh 就会丢失数据,因此它仅可用于交互式会话。

如果您有一个基本可靠但偶尔移动的连接,那么 Mosh 的替代方案是自动SSH自动重新连接,以及屏幕或者多路复用器在服务器上运行。即使客户端断开连接,screen/tmux 会话仍保留在服务器上,并且如果连接断开,autossh 会自动重新连接。

相关内容