TMOUT是Bash内置变量,设为正整数(秒)后,交互式Shell在无输入时自动退出,SSH登录即触发该机制;编辑/etc/profile添加export TMOUT=600可全局生效,新登录即启用,无需重启服务。

新手可以通过配置系统级 Profile 文件(如 /etc/profile)来统一控制所有用户的 SSH 会话空闲超时行为,实现安全加固。这种方式简单直接、无需重启服务,适合批量管理且对权限要求低的场景。
为什么用 TMOUT 配置 Profile 能实现自动断开
TMOUT 是 Bash 内置的环境变量,单位为秒。只要在 Shell 启动时被加载并设为正整数,Bash 就会在该秒数内无任何输入时自动退出当前会话。SSH 登录后启动的是交互式 Shell,因此该机制天然适用于 SSH 会话。
注意:它只作用于 Bash/Zsh 等支持该变量的 shell,不适用于非交互式命令或 systemd 服务;且仅在用户登录后进入 shell 才生效,不是网络层断连,但能达到“无人值守即登出”的安全目标。
全局配置方法(推荐新手使用)
编辑系统级 Profile 文件,让所有用户默认受控:
- 用 root 权限打开
/etc/profile:sudo vim /etc/profile - 在文件末尾添加一行(例如设置 600 秒即 10 分钟):
export TMOUT=600 - 保存退出后,立即对新登录用户生效;已有会话需重新登录才应用
- 验证是否生效:登录后执行
echo $TMOUT,应输出600
针对特定用户单独配置
若只想限制某几个高权限账号(如 admin 或 backup),不干扰普通用户:
- 切换到目标用户家目录:
cd ~username - 编辑其个人配置文件:
vim .bash_profile(或.bashrc,建议优先用.bash_profile) - 加入:
export TMOUT=300(5 分钟) - 加载生效:
source .bash_profile
注意事项与常见问题
以下细节容易忽略,但直接影响效果:
-
不要在脚本中 export TMOUT 后再执行 long-running 命令——比如写成
export TMOUT=3600; tail -f /var/log/messages,会导致 tail 进程也被超时中断 -
sudo 切换用户后,TMOUT 不继承:从普通用户
sudo -i进入 root,读取的是 root 的 profile,而非原用户的;需分别配置 - 图形终端或 tmux/screen 会话中,TMOUT 仍有效,但可能被子 shell 屏蔽,建议测试确认
- 设为 0 或未定义 = 不启用超时,设为负数无效,会被忽略
这种方式不依赖 SSH 协议心跳,也不需要重启 sshd,部署快、见效准,是入门级安全加固中最实用的一环。

















