CentOS 下 SSH 连接出现乱码,通常是字符集不一致导致的。可以按下面步骤逐一排查和解决。
locale
如果看到类似:
LANG=C
LC_ALL=
或包含 ASCII,说明没有正确设置 UTF-8。
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
编辑配置文件:
vi /etc/locale.conf
内容改为:
LANG="en_US.UTF-8"
LC_ALL="en_US.UTF-8"
然后执行:
source /etc/locale.conf
或重启服务器。
Window → TranslationUTF-8
文件 → 属性 → 终端 → 编码 → UTF-8
Session Options → Terminal → Appearance → Character encoding → UTF-8
localectl list-locales | grep UTF-8
如果没有 en_US.UTF-8:
localedef -i en_US -f UTF-8 en_US.UTF-8
或:
dnf install -y glibc-langpack-en
查看 /etc/ssh/sshd_config:
grep AcceptEnv /etc/ssh/sshd_config
确保有:
AcceptEnv LANG LC_*
然后重启 SSH:
systemctl restart sshd
如果文件本身编码是 GBK 而终端是 UTF-8,也会乱码。
iconv -f gbk -t utf-8 filename
或:
LANG=zh_CN.GBK ls
| 检查项 | 正确值 |
|---|---|
| 服务器 LANG | en_US.UTF-8 |
| SSH 客户端编码 | UTF-8 |
| locale 是否生成 | locale -a |
| 是否使用 GBK 文件 | 转码 |
CentOS 服务器
LANG=en_US.UTF-8
LC_ALL=en_US.UTF-8
客户端
UTF-8
如果你愿意,可以告诉我:
我可以给你精确到版本的一步到位方案。