首页/系统/信创系统运维速查/SSH 会话超时设置
安全加固65 条

SSH 会话超时设置

空闲会话自动断开:sshd 侧 ClientAliveInterval 与 CountMax 控制连接层面;shell 侧配合 TMOUT 控制交互空闲,两处都配才完整。

信创系统运维速查系统更新于 2026-10-13

超时要分两层看

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允许无响应的次数与间隔相乘得到大致断开时间
TMOUTshell 空闲自动退出秒数只对支持的 shell 与交互会话生效
TMOUT 全局与用户级生效范围用户级设置可覆盖全局值,需清点
图形终端是否受 TMOUT 约束部分终端模拟器行为不同,落地后实测
ClientAliveInterval 除了做超时,还能防止长连接被中间防火墙静默掐断:纯内网长任务场景即使不需要断开,也常设置一个保活间隔。
TMOUT 的行为与 shell 实现相关,bash 交互会话支持较好,其他 shell 与图形终端不一定适用,落地前按实际环境验证。

易错点

  • 超时间隔设得太短,长任务在前台运行时被误断,任务中途失败且难以判断原因
  • 只配了 sshd 侧就以为满足『操作超时退出』,评审时被指出 shell 空闲没有自动退出
  • TMOUT 同时写在全局与用户级配置里,用户级值覆盖全局,策略实际未按基线执行
  • 把 ClientAliveInterval 设为 0 表示『更安全』,实际长连接更容易被中间设备静默断开
  • 配置下发后没有实测,个别 shell 或终端不受约束,评估抽检时才发现策略没落地

数据来源与参考

  • man 5 sshd_config(ClientAliveInterval)
  • man 1 bash(TMOUT)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌