方法一:使用 TMOUT 环境变量(最推荐)
这是最通用、简单的方法,能对本地终端和SSH远程登录的Shell会话生效。
1. 临时设置(仅对当前会话有效)
直接在终端执行以下命令,单位是秒。例如,设置为10分钟(600秒)后无操作自动退出:
export TMOUT=600
这个设置只对当前终端窗口有效,关闭后即失效。
2. 永久设置(对所有用户生效)
编辑系统级配置文件 /etc/profile
sudo vi /etc/profile
在文件末尾添加以下内容
export TMOUT=600
readonly TMOUT
export TMOUT=600:设置超时时间为600秒。
readonly TMOUT:将变量设为只读,防止用户自行修改。
保存文件后,执行以下命令使配置立即生效,或重新登录系统:
source /etc/profile
3. 永久设置(仅对当前用户生效)
如果只想为特定用户设置,可以编辑该用户家目录下的 ~/.bashrc 或 ~/.bash_profile 文件
vi ~/.bashrc
在文件末尾添加相同内容:
export TMOUT=600
readonly TMOUT
保存后执行 source ~/.bashrc 使其生效。
验证配置:执行 echo $TMOUT,如果返回你设置的值(如600),则说明配置成功
方法二:修改SSH服务端配置(仅对SSH连接有效)
此方法只对通过SSH协议远程登录的用户生效。
编辑SSH服务端配置文件:
sudo vi /etc/ssh/sshd_config
在文件中添加或修改以下两个参数
ClientAliveInterval 600
ClientAliveCountMax 0
ClientAliveInterval 600:表示每隔600秒(10分钟)服务器会向客户端发送一次心跳请求。
ClientAliveCountMax 0:当设置为0时,如果客户端在ClientAliveInterval时间内没有响应,服务器会直接断开连接,实现超时退出效果
保存文件后,需要重启SSH服务使配置生效:
sudo systemctl restart sshd
其他相关超时设置
su 命令超时:su 命令的超时通常也是由 TMOUT 变量控制的。如果不想让 su 切换后自动退出,可以检查并移除 /etc/profile 等文件中的 TMOUT 设置。
sudo 密码超时:这控制的是执行 sudo 后,再次输入密码的间隔时间,而非会话超时。可以通过 visudo 命令修改 timestamp_timeout 值
总结与建议
建议:
对于一般需求,首选 TMOUT 变量,因为它配置简单且适用范围广。
超时时间建议设置在 300秒到1800秒(5-30分钟) 之间,以平衡安全性和便利性。
设置 readonly TMOUT 可以增强安全性,防止用户无意或有意更改。
对于需要长时间运行的任务(如编译、数据导入),建议使用 screen 或 tmux 等终端复用工具,或 nohup 命令,避免因超时导致任务中断