新手配置linux ssh长连接需客户端与服务端协同:客户端在~/.ssh/config中设serveraliveinterval 60和serveralivecountmax 5,服务端在/etc/ssh/sshd_config中配clientaliveinterval 300、clientalivecountmax 6及tcpkeepalive yes,并关闭gssapiauthentication和tmout干扰。

新手配置 Linux SSH 长连接,核心是让客户端或服务端主动“打招呼”,避免网络中间设备(如防火墙、NAT网关)因长时间无流量而切断连接。跨地域维护时网络延迟高、抖动多,不能只设一个参数,得搭配使用、分层防护。
客户端配置(推荐新手从这里入手)
这是最安全、影响最小的方式,只改你自己的电脑,不碰服务器权限。编辑本地 SSH 配置文件:
~/.ssh/config
加入以下内容(可按 Host 精准匹配不同服务器):
- Host * —— 匹配所有主机(也可写成 Host myserver 只对某台生效)
- ServerAliveInterval 60 —— 每 60 秒发一次心跳包
- ServerAliveCountMax 5 —— 连续 5 次没收到响应才断开(即最多容忍 5 分钟失联)
保存后,下次 ssh user@host 就自动生效,无需加额外参数。注意:这个文件需确保权限为 600(chmod 600 ~/.ssh/config),否则 SSH 会忽略它。
服务端配置(需管理员权限,适合统一管理)
如果你有服务器 root 权限,且要让所有连接都稳定(比如团队共用跳板机),就改服务端:
编辑 /etc/ssh/sshd_config,确认或添加三行:
- TCPKeepAlive yes —— 启用底层 TCP 探活,兜底防链路静默中断
- ClientAliveInterval 300 —— 服务器每 5 分钟问一次“还在吗?”
- ClientAliveCountMax 6 —— 允许最多 6 次无响应(即最长保活 30 分钟)
改完必须重启服务:sudo systemctl restart sshd。注意:当前 SSH 会话会断开,别在单连接里改完直接关终端。
顺手排查两个常见“假超时”陷阱
很多新手以为连上了又卡住是网络问题,其实是配置干扰:
- GSSAPIAuthentication yes —— 默认开启,但多数内网服务器没配 Kerberos,会导致输入密码后卡 10–30 秒。解决:在 /etc/ssh/sshd_config 加 GSSAPIAuthentication no,再重启 sshd。
-
TMOUT=300(Shell 级超时)—— 和 SSH 协议无关,是 Bash 自己的空闲退出机制。检查
echo $TMOUT,若非零,可在 ~/.bashrc 加 export TMOUT=0 关闭。
验证是否生效的小技巧
连上后执行:ss -tnp | grep :22,看连接状态是否持续;或故意切走 10 分钟,回来敲个空格,如果光标还闪、没报 “broken pipe”,说明保活成功。跨地域调试时,建议先用 ssh -o ServerAliveInterval=30 user@host 临时测试,再写入配置。











