Rocky Linux 9 SSH登录后中文不显示?一篇教会你完整排查与修复

笔者在家里面有一个基于 Rocky Linux 9.7 的服务器,为了便于管理,在这个服务器里面部署了一个宝塔面板系统。平时使用宝塔面板内置的“终端”对服务器进行管理的时候,其输出的信息一般都可以正常显示中文,但最近不知道做了什么操作,在执行一些命令的时候,原本是会按照笔者所使用的客户端电脑的语言环境,应该是会输出中文的,但现在只能输出英文,包括绕开宝塔面板,直接使用笔者电脑的 SSH 客户端连接,显示的也是英文。

Rocky Linux 9 SSH登录后中文不显示?一篇教会你完整排查与修复-工作应用、软件

下面是笔者的排查过程:

1、检查当前环境变量

执行以下命令,查看当前语言的环境变量值:

echo $LANG

执行了之后,显示当前的语言环境变量是“zh_CN.UTF-8”,表示当前的语言环境是简体中文环境。所以,不显示中文,跟这里没有关系;

2、检查简体中文语言包是否已经安装

执行以下命令,看看简体中文语言包是否已经安装到系统里面:

locale -a | grep zh_CN

笔者执行了之后,系统显示出下面的内容:

zh_CN
zh_CN.gb18030
zh_CN.gb2312
zh_CN.gbk
zh_CN.utf8

这表示笔者的服务器已经安装了简体中文相关的语言包(如果没有安装,可以执行 dnf groupinstall “Chinese Support” 进行安装)

3、尝试重新设定系统默认语言环境

执行以下命令,把简体中文设置成系统默认的语言环境:

localectl set-locale LANG=zh_CN.UTF-8

但执行上面这个命令之后,笔者还是看到在执行一些命令的时候,没有输出中文;

4、检查 SSH 服务端的配置

因为宝塔面板终端是通过 SSH 连接的服务器,因此笔者执行了以下的命令,检查 SSH 服务端是否在无条件接受或修改客户端的语言环境变量:

grep -E "AcceptEnv|LC_" /etc/ssh/sshd_config

结果是没有输出任何信息(空输出),表示 SSH 服务端没有强制覆盖语言环境变量。

5、连接的时候跳过系统的个人配置文件:

在客户端中执行以下命令,

ssh -t root@服务器地址 "bash --noprofile --norc"

执行上述命令之后,跳过服务器root账户的个人配置文件(.bashrc 等),以这种方式登录的话,就可以显示中文了。

经过上述的排查,造成无法正常输入中文的原因,可能是在指定账户个人配置文件的加载过程中,某种机制清空了区域设置,导致最终生效的环境变成了英文,而 bash –noprofile –norc 跳过了这些配置文件,环境是干净的,所以中文正常显示。

问题的解决:

在服务器 ~/.bashrc 文件末尾,强制设置并导出中文区域变量。由于 ~/.bashrc 会在所有交互式 Shell 启动的最后被加载,它可以覆盖掉之前所有的错误设置。

可以执行以下命令完成配置:

# 1. 备份原文件
cp ~/.bashrc ~/.bashrc.bak

# 2. 在末尾强制写入正确的区域设置
cat >> ~/.bashrc << 'EOF'

# 强制修复 SSH 登录后的语言为中文
export LANG=zh_CN.UTF-8
export LC_MESSAGES=zh_CN.UTF-8
export LC_CTYPE=zh_CN.UTF-8
# 确保 LC_ALL 不被错误设置
unset LC_ALL
EOF

执行上述配置后,退出当前的登录,然后重新通过 SSH 客户端登录系统。重新登录后,笔者执行了一些命令,终于可以正常输出中文了,另外,如果仍不生效,可尝试执行“source ~/.bashrc”或重启服务器。至于是哪一种机制清空了区域设置,笔者并没有深究下去。

Rocky Linux 9 SSH登录后中文不显示?一篇教会你完整排查与修复-工作应用、软件1
如需转载本站的文章,请先通过电子邮件的方式联系站长,站长确认后方可转载,并需要注明出处。

为您推荐