温馨提示×

CentOS SSH乱码怎么解决

小樊
43
2026-08-29 10:25:31
栏目: 智能运维

CentOS 下 SSH 连接出现乱码,通常是字符编码不一致导致的(客户端、SSH、服务器 locale 不一致)。可以按下面顺序排查和解决。


一、确认问题现象

常见乱码表现:

  • 中文文件名乱码
  • lscat 中文内容乱码
  • vim、日志文件乱码
  • 只在 SSH 登录后乱码,本地终端正常

二、最常见原因 & 解决方案

✅ 1. 服务器 locale 不是 UTF-8(最常见)

查看当前 locale

locale

正常应看到类似:

LANG=en_US.UTF-8
LC_ALL=en_US.UTF-8

如果看到:

LANG=C

或没有 UTF-8,就会导致乱码。


✅ 2. 修改 CentOS 服务器字符集为 UTF-8

CentOS 7 / 8

编辑配置文件:

vim /etc/locale.conf

内容改为:

LANG=en_US.UTF-8
LC_ALL=en_US.UTF-8

或者中文环境:

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

重新加载:

source /etc/locale.conf

或重新登录 SSH。


✅ 3. 检查是否安装了中文 locale

locale -a | grep zh_CN
locale -a | grep UTF-8

如果没有,安装:

yum install -y glibc-langpack-zh

三、SSH 客户端问题(Windows 常见)

✅ 4. Windows 终端编码问题

如果你用:

  • PuTTY
  • Xshell
  • SecureCRT
  • MobaXterm

✅ 设置方法:

  • 字符编码 → UTF-8
  • 字体 → 支持中文(如 Consolas、Courier New)

PuTTY 示例:

Window
 └─ Translation
    └─ Remote character set → UTF-8

✅ 5. Windows 本地 cmd / PowerShell 乱码

在 Windows 10+:

chcp 65001

四、SSH 本身配置(一般不用改)

✅ 6. 检查 SSH 是否传递 locale

grep -R SendEnv /etc/ssh/ssh_config

CentOS 默认:

SendEnv LANG LC_*

如被禁用,SSH 不会传递 UTF-8 环境变量。


五、临时解决方案(不推荐长期使用)

✅ 临时设置 UTF-8

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

写入 ~/.bashrc 可永久生效:

echo 'export LANG=en_US.UTF-8' >> ~/.bashrc
echo 'export LC_ALL=en_US.UTF-8' >> ~/.bashrc
source ~/.bashrc

六、总结(最快解决方式)

推荐组合(90% 情况)

  • 服务器:
    LANG=en_US.UTF-8
    
  • SSH 客户端编码:
    UTF-8
    

七、如果你愿意,我可以帮你进一步定位

你可以直接把下面信息发我:

  1. 使用的 SSH 客户端
  2. locale 输出
  3. 乱码截图或示例文字
  4. CentOS 版本:
    cat /etc/centos-release
    

我可以给你针对你环境的最小修改方案

0