必须用export tmout=900且后接readonly tmout配置系统级超时,仅tmout=900无效;需echo $tmout和sh -c 'echo $tmout'双验证是否导出继承,ssh空闲退出需tmout与clientalive参数协同。

在Linux运维环境中,远程SSH会话长期空闲却不自动退出,会导致未授权访问风险和系统资源占用,必须通过TMOUT环境变量精确控制终端输入层空闲超时行为。
确认当前TMOUT是否已生效
登录目标服务器后,立即执行:echo $TMOUT。若输出为空或非正整数(如0、-1、600.5),说明变量未设置、被覆盖或格式错误,后续配置将无效。
再运行sh -c 'echo $TMOUT',检查子Shell是否继承——若此处输出为空,证明export缺失,仅TMOUT=600写法完全不起作用。
为所有用户统一配置TMOUT(推荐生产环境)
第一步:用sudo权限编辑系统级登录Shell配置文件:sudo nano /etc/profile。
第二步:滚动至文件末尾,添加以下两行(顺序不可颠倒):
export TMOUT=900
readonly TMOUT
第三步:保存退出后,执行source /etc/profile使当前会话立即加载;新SSH连接将在下次登录时自动生效。
【必须用export声明,且readonly需放在export之后】只写TMOUT=900是局部变量,无法传给子Shell;而先readonly再export会导致语法错误,bash直接报错退出。
仅对特定运维账号启用(避免影响开发或测试用户)
方法一:直接编辑该用户家目录下的登录Shell配置文件
执行vim ~/.bash_profile(Bash用户)或vim ~/.zprofile(Zsh用户),追加export TMOUT=600并保存。
方法二:若该用户使用图形终端(如GNOME Terminal)频繁启动非登录Shell,需额外补上~/.bashrc中的继承语句
在~/.bashrc末尾添加source ~/.bash_profile,否则/etc/profile设置对其无效。
注意:不要把TMOUT写进~/.bashrc就以为万事大吉——该文件在SSH首次登录时不加载,仅用于新标签页等非登录场景。
验证配置是否真正起效
重新SSH登录后,执行echo $TMOUT确认输出为设定值(如900);然后静默等待,不敲任何键、不执行任何命令。
900秒(15分钟)后终端应显示timed out waiting for input: auto-logout并自动断开连接。
若提前退出,大概率是SSH服务端ClientAliveInterval参数在干预——此时需检查/etc/ssh/sshd_config中ClientAliveInterval × ClientAliveCountMax是否小于TMOUT值。











