跳转到内容
新建笔记

ssh 远程连接无法自动打开zsh

  1. chsh 命令未完全生效:

    • 使用 chsh 命令更改默认 shell 需要重新登录会话,并且有时可能需要重启系统以确保所有会话都正确更新。如果更改后没有注销并重新登录,系统可能仍会使用旧的默认 shell(例如 bash)。
  2. SSH 配置未更新:

    • SSH 服务可能在某些配置文件中被设置为默认使用 bash 作为登录 shell,即使用户的默认 shell 被设置为 zsh。这种情况通常发生在某些服务器环境中,管理员可能对 /etc/passwd 文件或 SSH 服务配置进行了限制。
  3. .bash_profile 或 .bashrc 自动执行 bash:

    • 如果在主目录中有 .bash_profile 或 .bashrc 文件,这些文件会在每次登录时自动运行。如果这些文件包含启动 bash 的命令,即使默认 shell 是 zsh,仍然会启动 bash。
  4. 未正确修改 /etc/passwd 文件:

    • chsh 命令实际是修改 /etc/passwd 文件中的默认 shell 信息。如果由于某些原因(例如权限问题或命令语法错误),该文件未被正确修改,默认 shell 仍然可能是 bash。
  5. SSH Daemon 配置:

    • SSH Daemon(sshd)的配置文件可能会强制所有连接使用 bash 作为默认 shell。在这种情况下,即使用户的 shell 已被更改为 zsh,SSH 登录仍会使用 bash。

在 .bash_profile 或 .bashrc 文件中添加以下代码:

终端窗口
# 启动 zsh
if [ -t 1 ]; then
exec zsh
fi

由于代码片段有效地在 bash 启动后立即切换到 zsh,最可能的情况是:

  • 系统或用户的登录 shell 实际上仍然是 bash,而不是 zsh。
  • 确保使用 chsh -s $(which zsh) 正确更改用户的默认 shell,或者手动编辑 /etc/passwd 文件并重新启动 SSH 服务。

来源:CSDN 原文,首次发布于 2024-08-29。