我已经设置了 SSH 连接来在远程服务器上运行程序。该程序每 10 秒在终端上打印一次调试信息。如果我让 SSH 窗口长时间打开(例如 10 小时),SSH 连接是否会变得不活动? SSH 会话中的活动如何定义?我应该每 x 秒键入/运行命令以保持会话活动吗?
答案1
您不需要做任何特殊的事情,SSH 不会因为不活动而终止连接。所以没有定义不活动期之内SSH。
然而,您和服务器之间的网络路由上的其中一个设备可能会丢失路由,并且对于该活动,从一侧通常就足够了,但并非总是如此(有“到达确认包”、确认、从服务器返回到服务器)使用 TCP 时的客户端)。
来自双方的流量并不能保证持续的连接,如果您有 DSL 调制解调器并且您的提供商决定您每天获得一个新的 IP 地址,则连接将会中断。
您可以让您的客户端定期发送一些数据包,方法是插入
ServerAliveInterval 5
除了每 10 秒来自服务器的流量之外,每 5 秒还有一些客户端到服务器的流量/etc/ssh/ssh_config
。~/.ssh/config
DSL 调制解调器重置连接的更简单的“解决方案”是运行服务器端软件tmux
或者screen
:如果连接断开,您只需再次 SSH 到服务器,发出tmux attach
或screen -r
即可继续查看不间断的服务器程序。
如果您不太担心失去连接,而是担心失去连接会导致服务器程序停止,那么使用tmux
/特别有用。screen
为此,您还可以将原始程序的输出重定向到 file 并使用tail -f
,但这不允许您轻松地与服务器程序交互(如果有必要的话)。tmux
和screen
(以其基本形式)易于使用,但存在一些副作用,例如无法使用图形终端上的滑块向后滚动(您必须使用键盘快捷键让服务器在其缓冲区中向后滚动)那)。
针对中断连接的设备,更灵活的解决方案是使用mosh
。这使用 SSH 交换一些秘密信息,然后即使一个或两个 IP 地址发生变化也允许重新连接。然而,这更难以设置和开始工作。
在您的情况下,我会从使用开始tmux
,并在连接确实停用时手动重新连接。
答案2
另外,使用 SCREEN 命令确实很有帮助。这样您就可以运行任何命令,而不必担心您的 ssh 连接。