Openssh server 默认shell设置为 Git Bash 登录时 /etc/profile 不运行导致中文乱码

145a 295 信誉分
2025-11-30T09:46:00.08+00:00

我通过修改HKEY_LOCAL_MACHINE\SOFTWARE\OpenSSH下的注册表项将 Openssh server 默认shell设置为了 Git Bash,但由于缺少--login的启动参数,显示中文时会乱码。如何使 Openssh server 启动 Git Bash 时附带--login的启动参数?直接在bash.exe后加--login无效。

用户的图像

UPDATE

bash.exe 似乎没有运行 etc/profile

etc/profile.d/lang.sh 写道:

# /etc/profile.d/lang.sh: sourced by /etc/profile.

我在 /etc/bash/bashrc 发现如下代码:

# If started from sshd, make sure profile is sourced
if [[ -n "$SSH_CONNECTION" ]] && [[ "$PATH" != *:/usr/bin* ]]; then
    source /etc/profile
fi

添加一行,变为:

echo "hello from bashrc"
# If started from sshd, make sure profile is sourced
if [[ -n "$SSH_CONNECTION" ]] && [[ "$PATH" != *:/usr/bin* ]]; then
    source /etc/profile
fi

远程连接,看到了echo的输出:

用户的图像

bash.bashrc 似乎运行了。

Windows 家庭版 | Windows 10 | Windows Hello、锁屏界面和登录
0 个注释 无注释
{count} 票

1 个答案

排序依据: 非常有帮助
  1. Francisco Montilla 24,535 信誉分 独立顾问
    2025-11-30T10:39:41.9333333+00:00

    你好

    你无法附加 --login DefaultShell 到互动式登录。Windows OpenSSH 注册表键 HKLM\SOFTWARE\OpenSSH\DefaultShell 只接受 shell 可执行文件的路径,唯一的额外旋钮是 DefaultShellCommandOption sshd 运行单个命令时使用的,bash -c "whoami"而不是在启动交互式 shell 时使用。这就是为什么添加 --login After bash.exe 不会影响你的 SSH 会话。

    最简单的解决办法是让你的互动式非登录 bash 像登录壳一样。编辑账户并获取 ~/.bashrc 登录资料,然后重新连接。例如,将这行附加到 ~/.bashrc

    . /etc/profile
    

    如果仍然看到中文杂乱,也请将你的本地设置附加到 ~/.bashrc,例如:

    export LANG=zh_CN.UTF-8
    export LC_ALL=zh_CN.UTF-8
    

    下一次 SSH 登录时,Git Bash 会像 /etc/profile ~/.bashrc平常一样读取并获取预期环境 bash --login ,无需更改 OpenSSH 注册表设置。


你的答案

提问者可以将答案标记为“已接受”,版主可以将答案标记为“已推荐”,这有助于用户了解答案是否解决了提问者的问题。