最直接有效的方法是服务端配置ClientAliveInterval和ClientAliveCountMax:在/etc/ssh/sshd_config中启用TCPKeepAlive yes、ClientAliveInterval 60、ClientAliveCountMax 3,修改后需执行sudo systemctl restart sshd生效。

SSH 连接频繁掉线,基本不是网络突然断了,而是服务端或客户端主动关掉了空闲连接。关键在保活参数,不是调大超时时间。
服务端怎么配 ClientAliveInterval 和 ClientAliveCountMax
这是最直接有效的办法,适用于你能改服务器配置的场景。修改 /etc/ssh/sshd_config,确保这三行生效(去掉前面的 #):
-
TCPKeepAlive yes:启用底层 TCP 保活,和上层探测协同工作更稳 -
ClientAliveInterval 60:每 60 秒发一次探测包(30–120 秒之间都合理,太短加重负载,太长可能被中间设备掐断) -
ClientAliveCountMax 3:连续 3 次没收到响应才断开(即最多容忍约 3 分钟无交互)
改完必须重启服务:sudo systemctl restart sshd。注意:ClientAliveInterval 0 表示禁用探测,不是“永远不超时”;ClientAliveCountMax 0 是无限重试,容易让僵死连接长期占资源,不推荐。
客户端怎么用 ServerAliveInterval 避免改服务端
云服务器、共享主机或你没 root 权限时,靠客户端配置最实用。编辑本地 ~/.ssh/config(没有就新建),按需添加:
- 对单台主机生效:
Host myvpsHostName 192.168.1.100User deployServerAliveInterval 60ServerAliveCountMax 3 - 对所有主机生效(慎用):
Host *ServerAliveInterval 45ServerAliveCountMax 3
这个配置只影响你本地 ssh 命令行为,ServerAliveInterval 是客户端发起心跳的间隔,不是服务端等待时间。值设太小(比如 10)可能触发部分 NAT 设备限速,45–60 是较稳妥范围。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
为什么加了保活还是断?中间设备和 Shell 自身会干扰
即使两端都配了保活,掉线仍可能发生,常见干扰源有三个:
- 家用光猫、企业防火墙或 NAT 网关默认清理空闲 TCP 连接(超时多为 300–600 秒),此时需同步缩短保活间隔,比如试
ServerAliveInterval 30 - 终端软件自身有空闲断开设置:iTerm2 的 “Idle exit after…”、MobaXterm 的 “SSH Keepalive”、SecureCRT 的 “Anti-idle” 都要检查并关闭或设为发送 NO-OP
- Shell 层级的
TMOUT变量导致“假断连”:运行echo $TMOUT,若输出非空(如600),说明 Bash/Zsh 自己在 10 分钟后退出,跟 SSH 无关。临时禁用:unset TMOUT;永久修改可加到~/.bashrc或~/.profile
别漏查这三项,它们比 SSH 配置更容易被忽略。
临时调试用 -o 参数快速验证
改配置前想先确认是否有效,或者只是临时连一下又不想动文件,直接命令行覆盖:
ssh -o "ServerAliveInterval=60" -o "ServerAliveCountMax=3" user@host
这个只对当次连接生效,适合排查。搭配 -f -N 建后台隧道时也常用,比如:ssh -f -N -o "ServerAliveInterval=45" user@host。注意 -o 后面的键名必须全大写,且要用引号包裹含空格的值。

















