You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:07:32