我遇到一个问题,我的网络路由器偶尔会重新启动,因此我通过终端与 Ubuntu 服务器的 ssh 连接被中断。互联网连接只是暂时中断,我不希望我在终端中运行的进程被终止。
在我的客户端 ~/.ssh/config 上我有:
TCPKeepAlive yes
ServerAliveCountMax 10
ServerAliveInterval 5
但调整上述参数没有帮助。服务器 sshd 具有默认的 ubuntu 参数。
如何在客户端(我的情况是 Mac OS)上设置 ssh 并在服务器(我的情况是 Ubuntu)上设置 sshd,以便我的 ssh 会话在路由器重启后依然有效?
谢谢!
答案1
由于 ssh 使用的底层协议 (TCP) 的性质,连接将在一定超时后断开。我倾向于通过以下两种方式之一来解决这些问题:
1)screen
在远程服务器上使用,并在连接恢复后重新连接。2)设置 VPN(例如openvpn
)并使用 udp 传输,这允许网络中断(以及通过一些配置,源 IP 更改)。
答案2
由于您的服务器和客户端都得到很好的支持,我强烈建议莫沙必利。 MOSH 使用 SSH,但设计为移动性,以便您可以连接、断开连接、更改 IP 等,它会尝试做正确的事情并保持您的连接。即使您断开连接,它也会自动连接,并让您回到原来的位置。
MOSH 的主要缺点是它需要安装额外的软件,并且并非在所有平台上都受支持。Windows 通过 MobaXTerm 提供半原生支持,但它不适用于仅支持原始 SSH 的 VMWare ESXi 等系统。
MOSH 还可以通过启用“预测输入”来帮助解决慢速链接问题,在这种输入方式中,您输入的内容基本上会在本地得到回显,而系统会判断是否真的应该输入。
答案3
一个简单的程序,允许您运行 ssh 实例 - 使其处于控制之下,并且一旦连接断开就重新启动同一个实例,该断开的最大次数由环境变量 AUTOSSH_MAXSTART 控制,或者如果该值为负数(默认值),则无限期地断开。
将此解决方案与屏幕相结合(由 Drav 首先提及)甚至更好。
答案4
您上面提到的参数也必须在 ssh 服务器站点上设置。仅在客户端没有帮助。如果您没有权限来适应 sshd 配置。我可能会使用支持固有 ssh keep live 的 ssh 客户端。发送一些数据以保持连接。Putty 可以为 Windows 做到这一点,SecureCRT 可以为 Mac 做到这一点。也许还有其他支持此功能的客户端。