macOS SSH 控制台乱码完整解决方案

14次阅读
没有评论

核心原因:本地 Mac 终端编码、系统 locale、SSH 环境变量转发、远程 Linux 服务器字符集四方编码不统一(必须全部统一为 UTF-8),乱码表现:中文方框□、问号?、字符错位、特殊符号乱码、退出终端后本地字符错乱。

一、临时一键修复(立刻生效,适合应急)

1. SSH 连接时强制指定 UTF-8 编码

bash

运行

# 连接时携带编码环境变量
ssh -o SendEnv=LANG,LC_ALL user@服务器IP
# 简写方式
LANG=en_US.UTF-8 ssh user@IP

2. 终端异常字符错乱(卡死 / 强制退出后乱码)

执行命令重置终端控制台:

bash

运行

stty sane

瞬间恢复按键、字符显示正常CSDN博…。

二、本地 Mac 永久配置(最关键第一步)

macOS 默认 Shell 为 zsh(10.15+),bash 老系统参考注释。

步骤 1:配置系统 locale 全局 UTF-8

  1. 编辑 Shell 配置文件

bash

运行

vim ~/.zshrc
# 老bash系统用:vim ~/.bash_profile
  1. 文件末尾粘贴三行:

bash

运行

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

也可写 zh_CN.UTF-8,英文 UTF8 兼容性更强,极少报错

  1. 生效配置

bash

运行

source ~/.zshrc
# bash: source ~/.bash_profile
  1. 验证是否成功

bash

运行

locale

所有字段末尾必须带 UTF-8 才算正常。

步骤 2:修改 SSH 全局配置,允许转发编码环境变量

让 SSH 把本地 UTF-8 编码传给远程服务器:

bash

运行

sudo vim /etc/ssh/ssh_config

找到 Host * 区块,修改 / 添加:

plaintext

Host *
  SendEnv LANG LC_*

保存退出;

若报错 cannot change locale (UTF-8),替换为固定值:

SendEnv LANG LC_ALL=en_US.UTF-8

步骤 3:终端软件编码 & 字体设置(二选一)

① Mac 自带「终端 Terminal」

  1. 顶部菜单:终端 → 设置 → 高级
  2. 文本编码:选择 Unicode (UTF-8)
  3. 文本页:字体选用 PingFang SC、Menlo、苹方(支持中文渲染)

② iTerm2(最常用第三方终端)

  1. Preferences → Profiles → Text
    • 字体:等宽字体 + 非 ASCII 字体选苹方 / 思源黑体
  2. Profiles → Terminal → Character EncodingUTF-8
  3. Advanced 开启:Prefer UTF-8 for clipboard 解决中文粘贴乱码

三、远程 Linux 服务器端配置(缺一不可)

服务器默认多为 C/POSIX 编码,不识别 UTF8 中文,必须修改:

1. 临时生效(当前会话)

SSH 登录服务器后执行:

bash

运行

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

2. 永久写入服务器环境变量

CentOS/RHEL:

bash

运行

vim /etc/profile
# 末尾添加
export LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8
source /etc/profile

Ubuntu/Debian:

bash

运行

vim ~/.bashrc
# 末尾添加编码变量,source生效

3. 开启 sshd 接收本地编码变量

编辑服务器 ssh 服务配置:

bash

运行

vim /etc/ssh/sshd_config
# 确保存在这一行(没有就加上)
AcceptEnv LANG LC_*
# 重启ssh服务
# CentOS: systemctl restart sshd
# Ubuntu: systemctl restart ssh

4. 服务器生成 UTF-8 语言包(缺失 locale 时报错必备)

bash

运行

# Ubuntu/Debian
locale-gen en_US.UTF-8
# CentOS
localedef -c -i en_US -f UTF-8 en_US.UTF-8

四、特殊场景:老服务器 GBK 编码兼容(极少用)

如果老旧服务器只能用 GBK 编码:

本地终端编码改为 GBK,两边统一即可,但强烈推荐全站 UTF8

五、排查自检流程(按顺序核对)

  1. Mac 本地 locale → 全 UTF8 ✅
  2. 终端软件编码:UTF8 ✅
  3. /etc/ssh/ssh_config 开启 SendEnv ✅
  4. 服务器 locale → 全 UTF8 ✅
  5. 服务器 sshd_config 开启 AcceptEnv ✅
  6. 乱码应急:stty sane

全部配置完成后,重启终端重新 SSH 连接,中文文件名、日志、提示符都会正常显示。

正文完
可以使用微信扫码关注公众号(ID:xzluomor)
post-qrcode
 0
评论(没有评论)
验证码