温馨提示×

CentOS SSH乱码如何解决

小樊
51
2026-08-18 06:37:37
栏目: 智能运维

CentOS 下 SSH 连接出现乱码,通常是字符集不一致导致的。可以按下面步骤逐一排查和解决。


一、最常见原因:客户端与服务器字符集不一致

1️⃣ 查看服务器当前字符集

locale

如果看到类似:

LANG=C
LC_ALL=

或包含 ASCII,说明没有正确设置 UTF-8。


2️⃣ 设置服务器为 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

或重启服务器。


二、SSH 客户端本身字符集问题(非常常见)

✅ 如果你用的是 Windows + PuTTY / Xshell / SecureCRT

PuTTY

  1. 打开 PuTTY
  2. WindowTranslation
  3. Remote character set 设置为:
    UTF-8
    

Xshell

文件 → 属性 → 终端 → 编码 → UTF-8

SecureCRT

Session Options → Terminal → Appearance → Character encoding → UTF-8

三、CentOS 7 / 8 / Stream 特别说明

生成 locale(如果系统没有 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

四、确认 SSH 配置未被覆盖

查看 /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

如果你愿意,可以告诉我:

  • ✅ CentOS 版本(6 / 7 / 8 / Stream)
  • ✅ SSH 客户端(PuTTY / Xshell / macOS Terminal)
  • ✅ 是 命令输出乱码 还是 文件名 / vim 乱码

我可以给你精确到版本的一步到位方案

0