问题描述
在使用SSH远程服务器时,如果在一段时间内未进行任何操作,则连接会断开(或者挂起,无响应)。
本文将介绍如何配置SSH客户端,以解决该问题。
问题原因
该问题的原因由很多:
可能是当前使用的NAT防火墙自动关闭会话; 可能是远程服务器操作系统自动关闭空闲会话(当前TCP连接长时间没有数据流动)
这些都会导致连接被释放(断开)。
解决办法
可以定期向服务器发送报文,以暗示服务器该连接是使用中,请不要释放。
在SSH中,有两个ServerAliveCountMax与ServerAliveInterval选项,可以实现该功能。
修改/etc/ssh/ssh_config(系统级别)或~/.ssh/config(用户级别):
Host *
ServerAliveInterval 300
ServerAliveCountMax 5
上述配置表示,如果超过300秒(ServerAliveInterval)没有收到服务端发送的报文,则客户端发送一个消息,并要求服务器返回。如果服务器没有返回,则再次重试,最多5次(ServerAliveCountMax),如果一直没有收到服务端的响应,则断开连接。
超时自动断开的使用
虽然自动断开连接不好的,但是它也有其他的用途。比如在远程使用ssh执行命令时,我们希望超时自动断开:
#!/bin/sh ssh -o ServerAliveInterval=2 -o ServerAliveCountMax=2 root@ip-address "doing some stuff"

本文详细指导如何配置SSH客户端以防止因空闲而自动断开连接,涉及ServerAliveInterval和ServerAliveCountMax设置,同时介绍了在不同场景下如何利用这些设置,包括超时自动断开的应用和服务器端配置。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



