原因分析
-
chsh
命令未完全生效:- 使用
chsh
命令更改默认 shell 需要重新登录会话,并且有时可能需要重启系统以确保所有会话都正确更新。如果更改后没有注销并重新登录,系统可能仍会使用旧的默认 shell(例如bash
)。
- 使用
-
SSH 配置未更新:
- SSH 服务可能在某些配置文件中被设置为默认使用
bash
作为登录 shell,即使用户的默认 shell 被设置为zsh
。这种情况通常发生在某些服务器环境中,管理员可能对/etc/passwd
文件或 SSH 服务配置进行了限制。
- SSH 服务可能在某些配置文件中被设置为默认使用
-
.bash_profile
或.bashrc
自动执行bash
:- 如果在主目录中有
.bash_profile
或.bashrc
文件,这些文件会在每次登录时自动运行。如果这些文件包含启动bash
的命令,即使默认 shell 是zsh
,仍然会启动bash
。
- 如果在主目录中有
-
未正确修改
/etc/passwd
文件:chsh
命令实际是修改/etc/passwd
文件中的默认 shell 信息。如果由于某些原因(例如权限问题或命令语法错误),该文件未被正确修改,默认 shell 仍然可能是bash
。
-
SSH Daemon 配置:
- SSH Daemon(
sshd
)的配置文件可能会强制所有连接使用bash
作为默认 shell。在这种情况下,即使用户的 shell 已被更改为zsh
,SSH 登录仍会使用bash
。
- SSH Daemon(
解决方法
在 .bash_profile
或 .bashrc
文件中添加以下代码:
# 启动 zsh
if [ -t 1 ]; then
exec zsh
fi
由于代码片段有效地在 bash
启动后立即切换到 zsh
,最可能的情况是:
- 系统或用户的登录 shell 实际上仍然是
bash
,而不是zsh
。 - 确保使用
chsh -s $(which zsh)
正确更改用户的默认 shell,或者手动编辑/etc/passwd
文件并重新启动 SSH 服务。