需同时配置TMOUT=1800(30分钟shell空闲退出)和sshd_config中ClientAliveInterval 600与ClientAliveCountMax 3(30分钟SSH连接保活断连),二者协同覆盖终端输入空闲与网络假活跃场景,缺一不可。

要让 Linux 系统在用户空闲超过 30 分钟后自动断开会话,需同时配置 shell 层空闲控制 和 SSH 连接保活机制,两者缺一不可:前者管终端输入空闲(如本地终端、SSH 登录后的 Bash),后者管网络连接空闲(尤其应对防火墙/中间设备主动断连)。
设置 shell 会话空闲 30 分钟自动退出
该设置对所有使用 Bash 的交互式登录生效(包括 SSH 和本地 tty)。
- 编辑系统级配置文件:
sudo vim /etc/profile
- 在末尾添加两行:
TMOUT=1800 export TMOUT
- 生效方式:
- 新建登录会话自动加载
- 或手动刷新:
source /etc/profile
- 验证:登录后执行
echo $TMOUT,应输出1800
注意:普通用户可通过
unset TMOUT绕过。若需防绕过,改用只读方式(见下文“增强策略”)。
配置 SSH 服务端 30 分钟无响应自动断连
仅靠 TMOUT 无法处理网络中断但进程未退出的情况(例如笔记本休眠后重连,sshd 仍认为连接活跃)。必须配合 SSH 服务端心跳检测:
Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。
- 编辑
/etc/ssh/sshd_config:sudo vim /etc/ssh/sshd_config
- 确保以下三行已启用并设为:
ClientAliveInterval 600 # 每10分钟发一次心跳 ClientAliveCountMax 3 # 连续3次无响应则断开 → 总超时 = 10 × 3 = 30 分钟
- 重启服务使配置生效:
sudo systemctl restart sshd
✅ 此组合确保:
- 用户真正在终端无操作满 30 分钟 →
TMOUT触发退出;- 连接因网络问题“假活跃”(如客户端崩溃、休眠)→
ClientAlive在 30 分钟内强制清理僵尸连接。
增强策略(可选,适合高安全环境)
防止用户篡改或跳过 TMOUT:
- 创建只读脚本:
echo 'TMOUT=1800' | sudo tee /etc/profile.d/autologout.sh echo 'readonly TMOUT' | sudo tee -a /etc/profile.d/autologout.sh echo 'export TMOUT' | sudo tee -a /etc/profile.d/autologout.sh sudo chmod +x /etc/profile.d/autologout.sh
- 验证是否只读:登录后运行
declare -p TMOUT,输出中应含readonly标识。
不影响运维的实用提醒
-
TMOUT=0可临时禁用(如跑tail -f /var/log/syslog),执行前加前缀即可:TMOUT=0 tail -f /var/log/syslog
- 使用
screen或tmux时,它们不继承父 shell 的TMOUT,建议在会话内单独设置,或依赖 SSH 层的ClientAlive保障。 - 测试是否生效:SSH 登录后保持静默 30 分钟以上,观察是否自动退出;也可用
ss -tunp | grep :22查看连接状态变化。
不复杂但容易忽略

















