必须用chsh -s /bin/bash,因CentOS 7的PAM和login程序仅认可该标准方式;直接改/etc/passwd易触发SSH拒绝、图形登录跳过或su失败;验证需组合echo $SHELL、grep /etc/passwd及ps -p $$,且必须重新登录才生效。

必须用 chsh -s /bin/bash,其他方法(比如改 /etc/passwd 或软链接 /bin/sh)在 CentOS 7 上容易导致登录失败或系统服务异常。
确认当前 Shell 和可用 Shell 列表
先看清楚现状,避免盲目操作:
-
echo $SHELL显示的是“默认 Shell”,不是当前正在运行的 Shell; -
echo $0显示的是当前会话实际在跑的 Shell(比如-sh或zsh); -
cat /etc/shells必须包含/bin/bash,否则chsh会拒绝修改; - 如果
which bash没输出/bin/bash,说明 bash 未安装,需先运行sudo yum install bash。
用 chsh 安全切换默认 Shell
这是唯一被 PAM 和 login 程序认可的标准方式:
CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离
- 普通用户执行:
chsh -s /bin/bash,输入密码后即生效; - root 用户为他人修改(如改普通用户):
sudo chsh -s /bin/bash username; - 不要省略
-s参数,直接运行chsh进交互式菜单在某些最小化安装的 CentOS 7 上可能卡住; - 改完不会立即影响当前终端,要新开一个登录会话(SSH 重连或 TTY 切换)才加载新 Shell。
为什么不能直接改 /etc/passwd?
CentOS 7 的 login 和 sshd 默认启用 PAM 模块校验,直接编辑 /etc/passwd 可能触发以下问题:
- SSH 登录时提示
Permission denied, please try again.(PAM 拒绝非白名单 Shell); - 图形界面登录管理器(如 gdm)直接跳过该用户;
-
su -切换用户失败,报错cannot execute /bin/bash: No such file or directory(即使文件存在,PAM 也会二次检查/etc/shells); - 系统更新后,
/etc/passwd可能被重置或覆盖。
验证是否真正生效
仅检查 $SHELL 不够,要组合验证:
-
echo $SHELL→ 应输出/bin/bash; -
grep "^$(whoami):" /etc/passwd | cut -d: -f7→ 应输出/bin/bash; - 新开终端后运行
ps -p $$→CMD列应显示bash,不是sh或dash; - 如果仍看到
sh-4.2$提示符,说明你没重新登录,或终端复用了旧会话(关掉所有终端窗口再重开)。
最易被忽略的一点:某些自动化工具(如 Ansible、CI 脚本)会通过非交互式 SSH 执行命令,这种场景下 $SHELL 不生效,实际调用的是 /bin/sh —— 此时需显式写成 bash -c "...",而不是依赖默认 Shell 切换。

















