关键在服务端配置/etc/ssh/sshd_config中必须同时设置clientaliveinterval(如60秒)和clientalivecountmax(如3),二者协同决定空闲断连总时长(180秒),并需取消注释、重启sshd生效,且须排查tmout、中间设备及终端工具干扰。

Linux 中修改 SSH 服务的闲置断开保活参数,关键在服务端配置 /etc/ssh/sshd_config 中的两个协同参数:ClientAliveInterval 和 ClientAliveCountMax。它们共同决定登录成功后、无操作状态下的连接存活时长,不是“超时值”本身,而是通过主动探测来维持连接。
确认当前配置再修改
别直接覆盖——先查清服务器现状:
- 运行命令:
grep -E "^(ClientAlive|TCPKeepAlive)" /etc/ssh/sshd_config - 特别注意云厂商镜像(如腾讯云、华为云)常预设
ClientAliveInterval 10+ClientAliveCountMax 1,实际就是 10 秒必断 - 若行前有
#,说明被注释,未生效
设置核心保活参数(必须同时配置)
用 root 权限编辑配置文件:sudo nano /etc/ssh/sshd_config,确保以下三行存在且未注释:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
-
TCPKeepAlive yes:开启底层 TCP 保活作为补充(非必须但建议) -
ClientAliveInterval 60:服务器每 60 秒向客户端发送一次加密心跳包(不建议低于 30,太小易被网络抖动误判) -
ClientAliveCountMax 3:连续 3 次未收到响应即断开连接(总容忍空闲时间为 180 秒)
⚠️ 注意:ClientAliveCountMax 0 表示首次探测失败就立即断开,极易误杀,不推荐。
重启服务使配置生效
保存文件后必须重启 SSH 服务,否则修改不生效:
- 多数系统:
sudo systemctl restart sshd - 旧系统:
sudo service ssh restart - 仅重载(不中断现有连接):
sudo systemctl reload sshd,但部分参数(如 LoginGraceTime)需 restart 才生效
额外注意其他干扰项
即使 ClientAlive 配置正确,连接仍可能被切断,还需排查:
-
Shell 级 TMOUT 变量:运行
echo $TMOUT,若输出数字(如 900),说明 Bash/Zsh 自身会在 15 分钟无输入后退出——这会覆盖 SSH 保活,优先级更高 - 中间设备:家用光猫、企业防火墙或云平台网关常设 300–600 秒空闲清理,需登录管理界面调大或关闭
- 终端工具自身设置:MobaXterm、SecureCRT、iTerm2 等自带 “Anti-idle” 或 “Keepalive”,优先级高于 SSH 配置,务必检查是否启用并设为发送 NO-OP 包










