macOS ssh 提示 cannot change locale (UTF-8)

macOS 上通过终端 ssh 连接服务器时提示警告:

-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory

连接上服务器后 vim 编辑文本中文显示乱码。

使用其他 SSH 应用连接服务器没有警告且中文正常显示。

原因:

macOS 终端在建立 SSH 连接时,会将本地的语言环境变量(如:LANG 和 LC_*)传递给远程服务器。远程服务器上缺少 UTF-8 对应的语言环境导致无法正确识别这些变量。

解决方法:

  1. 检查可用的语言环境

登录到服务器后运行:

locale -a

查看已安装支持的语言环境:

en_US.utf8 zh_CN.utf8
  1. 修改连接时语言环境
LC_CTYPE=en_US.UTF-8 ssh user@host

en_US.UTF-8en_US.utf8 都可以,两者实际上指的是相同的语言环境,建议使用 POSIX 标准 en_US.UTF-8

每次连接时输入语言环境比较麻烦,可修改 ssh 配置 ~/.ssh/config 一劳永逸:

Host <host_alias>
  HostName <host>
  User <user>
  Port 22
  SetEnv LC_CTYPE=en_US.UTF-8

现在不会出现警告,且中文正常显示