根本原因是堡垒机登录后目标服务器的LANG或LC_ALL环境变量缺失或为C,导致UTF-8中文解码失败;需通过echo $LANG、echo $LC_ALL和locale命令确认,并在目标服务器侧export LANG=en_US.UTF-8及清空LC_ALL来修复。

堡垒机接入后出现字符编码错乱(如中文显示为问号、方块或乱码),根本原因往往不是堡垒机本身编码错误,而是终端环境变量缺失或不一致,尤其集中在 LANG 和 LC_ALL 这两个关键变量上。这类问题在通过堡垒机跳转登录目标服务器时高频出现,且容易被误判为 SSH 或字体设置问题。
确认是否为环境变量缺失导致
直接在堡垒机 Web 终端或客户端连接后,执行以下命令查看当前会话的本地环境:
-
echo $LANG—— 正常应输出类似zh_CN.UTF-8或en_US.UTF-8;若为空或为C,即为高风险信号 -
echo $LC_ALL—— 若该变量被设为C,会强制覆盖所有 locale 设置,导致 UTF-8 中文失效 -
locale—— 查看完整 locale 配置,重点观察LC_CTYPE是否为UTF-8编码
区分堡垒机自身与目标服务器的编码环境
堡垒机作为代理通道,自身只负责转发字符流,不参与编码转换。真正起作用的是:
- 你使用的终端客户端(如 Xshell、FinalShell、Web 浏览器)是否启用 UTF-8 编码:Xshell 需在「文件 → 属性 → 终端 → 字符编码」中选 UTF-8
- 堡垒机登录后所连的目标服务器(如 Linux 主机)的 shell 环境变量是否生效:该变量通常由
/etc/profile、~/.bashrc或 PAM 模块加载 - 特别注意:通过堡垒机 Web 页面登录时,部分老版本堡垒机未透传 locale 变量,需在目标服务器侧显式设置
快速修复与长期配置建议
临时生效(当前会话):
-
export LANG=en_US.UTF-8(推荐英文环境避免中文输入法干扰) -
export LC_ALL=(清空该变量,避免其覆盖 LANG)
永久生效(目标服务器侧):
- 编辑用户家目录下的
~/.bashrc,末尾添加:export LANG=en_US.UTF-8export LC_ALL= - 执行
source ~/.bashrc生效,或下次登录自动加载 - 如需全局生效,可修改
/etc/profile(需 root 权限,谨慎操作)
关联排查点:Tomcat 或应用层乱码不可忽略
若乱码出现在 Web 应用返回内容(如后台接口响应中文异常),需同步检查:
- Tomcat 的
server.xml中 Connector 的URIEncoding="UTF-8"是否配置 - JVM 启动参数是否含
-Dfile.encoding=UTF-8 - 数据库连接 URL 是否带
characterEncoding=utf8(如 MySQL) - 注意:这些配置与堡垒机无关,但故障现象高度相似,易混淆定位方向

















