如何让sudo su切换后的Shell会话在闲置超时后自动退出?
解决Shell会话闲置超时(含sudo su切换用户后)的问题
我之前帮不少人处理过这个问题,你之前只修改/etc/profile的配置之所以只在普通用户生效,核心原因是:当你用sudo su切换用户时,启动的是「非登录Shell(non-login shell)」,这类Shell默认不会读取/etc/profile,而是会加载Shell的全局配置文件(比如bash的/etc/bashrc)和目标用户的个人配置文件(比如root的~/.bashrc)。
要让所有Shell会话(包括切换用户后的场景)都能自动超时退出,你可以按照以下步骤操作:
1. 确认你的Shell类型
先确定系统默认用的是哪种Shell,执行下面的命令:
echo $SHELL # 输出通常是 /bin/bash 或者 /usr/bin/zsh
2. 添加全局超时配置
根据你的Shell类型,修改对应的全局配置文件:
如果你用的是bash
编辑/etc/bashrc(这个文件会被所有bash的非登录Shell和登录Shell加载):
sudo nano /etc/bashrc
在文件末尾添加以下配置:
# 设置Shell闲置5分钟(300秒)后自动退出 export TMOUT=300 # 锁定变量,防止用户临时修改TMOUT值 readonly TMOUT
保存退出后,执行source /etc/bashrc让配置立即生效。
如果你用的是zsh
编辑/etc/zshrc文件:
sudo nano /etc/zshrc
添加同样的超时配置:
export TMOUT=300 readonly TMOUT
执行source /etc/zshrc让配置生效。
3. 验证配置效果
- 普通用户会话:保持闲置状态,等待设定的时长,确认是否自动退出。
- 切换用户后:执行
sudo su或sudo su -切换到其他用户,同样保持闲置,检查是否会自动超时退出。
额外注意事项
- 调整超时时长:把
300改成你需要的秒数即可(比如1800代表30分钟)。 - 特定用户例外:如果需要给某个用户关闭超时功能,可以在他的个人配置文件(比如
~/.bashrc)里添加unset TMOUT——但要注意,如果你全局配置里加了readonly TMOUT,需要先去掉只读属性,或者直接不在全局配置里加readonly。 - 全覆盖保障:如果你的系统
/etc/profile没有自动调用/etc/bashrc,可以在/etc/profile末尾也加上相同的TMOUT配置,确保登录Shell也能生效(多数发行版的/etc/profile已经会自动加载/etc/bashrc)。
内容的提问来源于stack exchange,提问作者vletter
相关产品推荐
相关产品推荐

