超时要分两层看
SSH 会话空闲超时由两处共同决定:sshd 侧的 ClientAliveInterval 与 ClientAliveCountMax 控制连接层面的保活探测,超过设定次数没有响应即断开连接;shell 侧的 TMOUT 变量控制交互会话的空闲自动退出。审计要求『操作超时退出』时通常两处都要配,因为前者断的是连接,后者断的是已登录的 shell。
基本信息
| sshd 侧 | ClientAliveInterval 秒、ClientAliveCountMax 次数 |
|---|---|
| shell 侧 | TMOUT 秒,常写在 /etc/profile.d/ 下 |
| 超时时长 | 间隔 × 次数,例如 300 秒 × 2 = 约 10 分钟 |
| 查看生效值 | sshd -T | grep -i clientalive |
| 生效方式 | sshd 改完 reload;TMOUT 需重新登录 |
| 权限要求 | root 改配置;TMOUT 可在用户级或全局配置 |
典型使用场景
- 安全基线要求空闲会话自动断开,减少会话被占用风险
- 跳板机上收敛空闲连接,降低并发会话占用
- 排查『操作到一半连接被断』时确认超时参数
- 批量终端统一下发会话超时策略
- 为长时任务单独评估超时值,避免任务被误断
sshd 侧配置
sshd 侧配置
# /etc/ssh/sshd_config
# ClientAliveInterval 300 # 每 300 秒向客户端发一次保活探测
# ClientAliveCountMax 2 # 连续 2 次无响应则断开连接,约 10 分钟
sshd -T | grep -i clientalive # 查看最终生效值
sshd -t && systemctl reload sshd # 语法校验后重载shell 侧配置与验证
shell 侧配置与验证
# /etc/profile.d/timeout.sh
# TMOUT=600
# readonly TMOUT
# export TMOUT
bash -lc 'echo $TMOUT' # 新登录 shell 中确认变量已生效
su - testuser -c 'echo $TMOUT' # 按普通用户验证
grep -rn TMOUT /etc/profile.d/ /etc/profile # 清点所有设置处,避免多份模板互相覆盖参数与效果
| 参数 | 含义 | 设置要点 |
|---|---|---|
| ClientAliveInterval | 保活探测间隔(秒) | 为 0 表示不探测,长连接可能被中间设备切断 |
| ClientAliveCountMax | 允许无响应的次数 | 与间隔相乘得到大致断开时间 |
| TMOUT | shell 空闲自动退出秒数 | 只对支持的 shell 与交互会话生效 |
| TMOUT 全局与用户级 | 生效范围 | 用户级设置可覆盖全局值,需清点 |
| 图形终端 | 是否受 TMOUT 约束 | 部分终端模拟器行为不同,落地后实测 |
ClientAliveInterval 除了做超时,还能防止长连接被中间防火墙静默掐断:纯内网长任务场景即使不需要断开,也常设置一个保活间隔。
TMOUT 的行为与 shell 实现相关,bash 交互会话支持较好,其他 shell 与图形终端不一定适用,落地前按实际环境验证。