Linux用户闲置超时自动登出需同时配置Shell会话(TMOUT变量)和SSH连接(ClientAliveInterval与ClientAliveCountMax),并可通过只读设置防绕过、临时调整应对运维需求。

Linux 设置用户闲置超时自动登出,核心是控制两个层面:Shell 会话空闲和 SSH 连接空闲。只配一个容易漏掉场景(比如笔记本休眠后 SSH 还连着但人已离线),必须两者配合才可靠。
设置 Shell 层空闲退出(管命令输入)
这是最直接的方式,靠 Bash 的 TMOUT 变量实现:只要终端没敲命令,倒计时结束就退出登录。
- 对所有用户生效:用 root 编辑
/etc/profile,在末尾加两行:TMOU=1800export TMOUT - 仅对某个用户生效:编辑其
~/.bashrc,加export TMOUT=1800(注意:SSH 登录默认不读.bashrc,建议改~/.bash_profile) - 立即生效:运行
source /etc/profile或新开终端 - 验证:执行
echo $TMOUT,输出应为1800(即 30 分钟)
配置 SSH 服务端保活断连(管网络连接)
TMOUT 不管网络假活跃(比如客户端崩溃、Wi-Fi 断了但服务端还不知道)。这时要靠 SSH 守护进程主动探测。
- 编辑
/etc/ssh/sshd_config,确保以下两行启用且值合理:ClientAliveInterval 600(每 10 分钟发一次心跳)ClientAliveCountMax 3(连续 3 次无响应就断开 → 总超时 30 分钟) - 保存后重启服务:
sudo systemctl restart sshd - 验证:用另一台机器 SSH 登录,等待 30 分钟不操作,应提示
Connection closed by remote host
防绕过增强策略(适合管理严格环境)
普通用户能用 unset TMOUT 或改配置绕过。若需锁定,可创建只读脚本:
- 新建
/etc/profile.d/autologout.sh,内容为:TMOUT=1800readonly TMOUTexport TMOUT - 赋执行权限:
sudo chmod +x /etc/profile.d/autologout.sh - 验证是否生效:
declare -p TMOUT输出中应含readonly标识
临时禁用或延长超时(运维调试时用)
维护期间不想被踢出?可在当前会话中快速调整:
- 立刻关闭:
unset TMOUT - 延长到 1 小时:
export TMOUT=3600 - 只对某条命令禁用超时:
TMOUT=0 tail -f /var/log/syslog


















