核心是让交互式Shell在无操作时主动终止会话,需正确导出TMOUT=600并写入/etc/profile或/etc/profile.d/autologout.sh等登录Shell配置文件,配合readonly加固及SSH的ClientAliveInterval 300与ClientAliveCountMax 3协同断连。

限制终端用户闲置超时时间自动登出,核心是让交互式 Shell 在无操作时主动终止会话,关键靠 TMOUT 环境变量配合正确加载路径和必要加固。单设变量不生效,写错位置或漏掉导出都会失效。
必须用 export 导出并写进登录 Shell 配置文件
TMOUT=600 不起作用,必须写成 export TMOUT=600 才能传给子 Shell 和新命令行。而且只对登录 Shell(如 SSH 首次登录、Ctrl+Alt+F2 进入的 TTY)有效,所以不能写进 ~/.bashrc——它默认不被登录 Shell 加载。
- Bash 用户全局生效:编辑 /etc/profile 或新建 /etc/profile.d/autologout.sh,末尾加
export TMOUT=600 - Zsh 用户全局生效:写入 /etc/zsh/zprofile
- 仅限某用户:编辑其 ~/.bash_profile(Bash)或 ~/.zshrc(Zsh),添加相同语句
防绕过要加 readonly,但别一开始就上
普通用户执行 unset TMOUT 或 TMOUT=0 就能临时关闭,所以生产环境需锁定。但 readonly TMOUT 一旦设错(比如值为 0 或负数),连自己都登不进去。
一款AI办公效率工具,主要用于Your ultimate AI-powered notetaking and learning companion.,适合需要提升相关任务效率的用户。
- 建议先稳定运行几天,确认无误后再加固
- 加固方式:在配置文件中紧接 export 后加一行
readonly TMOUT - 更稳妥做法:把三行写进 /etc/profile.d/autologout.sh:
TMOUT=600
export TMOUT
readonly TMOUT
再执行sudo chmod +x /etc/profile.d/autologout.sh
SSH 连接层必须同步配心跳断连
TMOUT 只管 Shell 输入空闲,而 SSH 连接可能因休眠、网络中断等“挂着不动”,形成安全缝隙。必须由 sshd 主动探测并清理。
- 编辑 /etc/ssh/sshd_config,确保启用:
-
ClientAliveInterval 300(每 5 分钟发一次心跳) -
ClientAliveCountMax 3(连续 3 次无响应即断开,总上限 15 分钟) - 改完执行
sudo systemctl restart sshd
验证是否真生效
配置完别只看文件写了没,要实测加载和继承效果:
- 新登录后运行
echo $TMOUT,应输出 600 - 再运行
sh -c 'echo $TMOUT',也得输出 600(确认子 Shell 继承) - 保持终端无任何输入,等待超时时间,观察是否提示 timed out waiting for input: auto-logout 并退出
- 用
declare -p TMOUT查看是否带 readonly 标识(若已加固)










