必须同时配置服务端clientaliveinterval+clientalivecountmax和shell层tmout;仅配其一无效,因tmout在无键盘输入时直接exit,而clientalive机制需tmout=0才生效,二者分别应对“人未操作”和“连接假死”。

SSH连接超时自动断开必须同时配置两套机制:服务端心跳探测(ClientAliveInterval + ClientAliveCountMax)和 shell 层空闲计时(TMOUT),缺一不可。只配其中一种,大概率失效。
为什么改了 sshd_config 还是断连?TMOUT 在偷偷接管
TMOUT 是 bash/zsh 的内置变量,只要被设为非零值(比如 export TMOUT=600),就会在用户无键盘输入 10 分钟后直接执行 exit——此时 SSH 连接根本没机会走到服务端保活逻辑。
- 它通常藏在
/etc/profile、/etc/bashrc或~/.bash_profile里(注意:~/.bashrc在 SSH 登录时默认不加载) - 检查是否生效:
echo $TMOUT;输出数字就说明它正在起作用 - 临时禁用:
unset TMOUT;永久禁用需删掉对应行并重载 shell(如source ~/.bash_profile) - 图形终端(GNOME Terminal、Konsole)默认不读
/etc/profile,TMOUT在这类环境里直接无效
ClientAliveInterval 和 ClientAliveCountMax 怎么配才真生效
这两个参数在 /etc/ssh/sshd_config 中协同工作,由 sshd 主动发加密心跳包,探测“连接是否还通”,而非“人有没有敲键盘”。它们只在 TMOUT=0 或未设置时才起作用。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 必须同时取消注释,且不能带等号:
ClientAliveInterval 300✅,ClientAliveInterval=300❌(语法错误,sshd -t会报错) - 推荐组合:
ClientAliveInterval 300(5 分钟发一次) +ClientAliveCountMax 3(最多丢 3 次) → 实际容忍 15 分钟无响应 - 别设
ClientAliveCountMax 0:这会让 sshd 在第一次心跳无响应时立刻断连,Wi-Fi 切换或短暂丢包都会误杀 - 改完必须
sudo systemctl restart sshd;reload有时不重载心跳参数
客户端要不要配 ServerAliveInterval?
要,但只在你无法控制服务端时用(比如连的是云厂商默认实例、学校服务器)。它让本地 ssh 命令主动发心跳,绕过服务端限制。
- 写入
~/.ssh/config,权限必须是600:chmod 600 ~/.ssh/config - 对所有主机生效的写法:
Host *<br>ServerAliveInterval 60<br>ServerAliveCountMax 3
- 只对某台生效:
Host myserver<br>HostName 192.168.1.100<br>User admin<br>ServerAliveInterval 60
- 命令行临时覆盖:
ssh -o ServerAliveInterval=30 user@host
最容易被忽略的是:systemd-logind 的 IdleAction(比如设了 IdleAction=lock 或 terminate)可能比 sshd 更早干掉会话;验证前先运行 loginctl show-user $USER | grep -E "(IdleHint|IdleSinceUSec)" 看是否已被系统级空闲策略拦截。










