MacOS用iTerm2/ZSH SSH连接AWS EC2报LC_CTYPE错误求客户端解决方案
问题原因
你遇到的报错是因为SSH默认会将本地的locale变量传递到远端EC2实例,你本地设置的LC_CTYPE=UTF-8并不是Linux系统标准的locale命名格式,Amazon Linux等镜像中不存在对应命名的locale,因此触发报错。你之前修改iTerm2设置未生效,是因为ZSH配置中手动设置的locale变量优先级更高。
客户端侧修复方案
方案1(推荐):禁止SSH传递本地locale变量到远端
该方案无需修改远端配置,也不会影响本地终端的locale设置,适配所有EC2镜像。
- 编辑本地SSH用户配置文件,若文件不存在直接新建即可:
nano ~/.ssh/config - 添加如下配置(
*代表对所有主机生效,你也可以修改为EC2的域名匹配规则,比如*.compute.amazonaws.com缩小生效范围):
Host * SendEnv !LC_* !LANG
- 保存退出文件后,重新启动终端连接EC2即可。
方案2:修正本地locale变量的命名格式
MacOS下合法的UTF-8 locale需要附带区域前缀,不能直接设置为UTF-8。
- 执行
locale -a查看本地支持的UTF-8格式locale,选择其中一个即可(通常选en_US.UTF-8或者zh_CN.UTF-8)。 - 编辑ZSH配置文件:
nano ~/.zshrc - 删除你之前添加的
export LC_CTYPE=UTF-8,替换为如下内容:
export LC_ALL=en_US.UTF-8 export LANG=en_US.UTF-8
- 执行
source ~/.zshrc生效配置,重新连接EC2测试即可。
内容的提问来源于stack exchange,提问作者Thomas
相关产品推荐
相关产品推荐

