我希望我的 SSH 登录会话在计算机进入睡眠和唤醒状态后保持连接。据我了解,TCP 可以在间歇性网络问题中生存,那么我可以更改设置以使其能够生存几个小时或几天吗?如果没有的话,有没有类似 SSH 的东西可以做到这一点?
我了解我可以将 SSH 设置为在网络再次可用时自动重新连接。但这并不理想,因为我希望我的登录会话与笔记本电脑进入睡眠状态之前的位置完全相同(即使是在 shell 命令行中键入内容的一半)。
我了解还有其他解决方法,但我希望有一种方法可以避免首先丢失 shell 会话。
答案1
答案2
screen
或tmux
绝对是可行的方法。ssh
连接就只是达到目的的一种手段,空闲时断线的频率(在合理范围内)不再重要。
如果您担心screen
在登录远程服务器时必须记住启动,那么让交互式会话自动加入现有会话screen
或启动新会话(如果还没有正在运行的会话)并不那么困难。
答案3
岩石(Reliable sOCketS) 是建立客户端 TCP 连接的程序的包装器,它可以检测 TCP 连接何时失败并自动重新连接客户端,即使客户端已移动到其他网络也是如此。论文里有描述过可靠的网络连接并且是可供下载。它没有维护,但它使用相当稳定的接口,所以它今天应该仍然可以工作。它使用库预加载 ( LD_PRELOAD
) 来隐藏标准库函数,因此它仅适用于动态链接的可执行文件。你只需将其运行为
rocks ssh …
Rocks 处理客户端移动性,而不是服务器移动性。如果服务器移动,您可能需要用袜子代理人。
对于交互式会话,一个不错的选择是莫什。它专为不可靠的连接而设计,并支持客户端移动性。如果连接不可靠,Mosh 就会丢失数据,因此它仅可用于交互式会话。
如果您有一个基本可靠但偶尔移动的连接,那么 Mosh 的替代方案是自动SSH自动重新连接,以及屏幕或者多路复用器在服务器上运行。即使客户端断开连接,screen/tmux 会话仍保留在服务器上,并且如果连接断开,autossh 会自动重新连接。