在 Git Bash 中使用 AWS Session Manager 时的乱码处理方法

日本語|English|中国语
| 6 min read
Author: takahiro-maeda takahiro-maedaの画像
Information

为了覆盖更广泛的受众,这篇文章已从日语翻译而来。
您可以在这里找到原始版本。

介绍

#

通常在工作中,你使用什么操作系统?
笔者个人使用 Mac,但在工作中使用 Windows。

在 Windows 环境下,我使用轻量且易于操作、可进行类似 POSIX 操作的 Git Bash。
因为也可以在 Windows Terminal 中使用,所以可以直接使用平时熟悉的命令,而且与 AWS CLI 的兼容性良好,这一点也很方便。

基于上述原因,通过 AWS Systems Manager Session Manager(以下简称 SSM)连接 EC2 时也使用了 Git Bash。
但是,在 Windows 环境下的 Git Bash 中,lsblk 和 systemctl status 等命令所包含的部分框线和符号有时会出现乱码。

本文将介绍此现象的复现内容、原因以及处理方法。

结论是,将 session-manager-plugin 更新到最新版 是首选方案。
如果难以更新,则通过 chcp.com 65001 将代码页更改为 UTF-8的方法也是有效的。

另外,从 Mac 连接时不会出现相同的问题。

前提条件

#

在以下环境中进行了验证。

  • OS: Windows: 11(Pro)
  • Terminal: Git Bash
  • AWS CLI: aws-cli/2.32.16 Python/3.13.11 Windows/11 exe/AMD64
  • session-manager-plugin: 1.2.707.0(検証開始時)→1.2.792.0(解決)

适用于以下人群:

  • 在 Windows + Git Bash 中使用 AWS CLI/SSM 连接 EC2 的用户。
  • 在执行 lsblk 或 systemctl status 时出现框线、符号等乱码的用户。

先行结论

#

处理方法如下:

优先级 处理方法 备注
1 将 session-manager-plugin 更新至最新版(1.2.792.0 及以上) 根本性解决方案。推荐优先使用
2 执行 chcp.com 65001 插件无法更新时的临时对策
3 在 .bashrc 中进行设置 若持续使用临时对策,则进行持久化设置

推荐对策:将 session-manager-plugin 更新至最新版

#

在验证过程中,已确认将 session-manager-plugin 更新至最新版后可解决该现象。

※该版本是在本文撰写及验证时的三天前发布的最新版。

在撰写本文时,将插件更新至最新版 1.2.792.0 后,乱码现象已无法复现。

安装方法请参阅以下 AWS 官方文档。

在 Windows 上安装 Session Manager 插件

为什么在 1.2.792.0 中得到改善

#

在撰写本文时的最新版 1.2.792.0 的发行说明中,包含了针对 Windows 环境下键盘输入及字符处理的修复。

查看与 1.2.792.0 相关的以下 PR,可见与本文现象相似的问题已被修复。

PR 中说明,Windows 版 session-manager-plugin 在输出时使用了 windows.WriteFile API,导致对 UTF-8 编码的部分语言字符无法正确处理。

由此,推测在中文和日文的部分输入输出中出现了乱码。

本文中确认的乱码问题,很可能也在包含该修复的 1.2.792.0 中得到改善。


本文后半总结了使用旧版本(1.2.707.0)时的复现内容及临时对策。
首先请将插件更新至最新版,确认问题是否解决。

乱码现象(旧版插件情况下)

#

当使用旧版本插件(例如:1.2.707.0)时,执行如下命令时会出现乱码:

lsblk
NAME         MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
loop0          7:0    0 27.8M  1 loop /snap/amazon-ssm-agent/12322
loop1          7:1    0   74M  1 loop /snap/core22/2339
loop2          7:2    0 48.1M  1 loop /snap/snapd/25935
nvme0n1      259:0    0    8G  0 disk
笏懌楳nvme0n1p1  259:1    0    7G  0 part /
笏懌楳nvme0n1p14 259:2    0    4M  0 part
笏懌楳nvme0n1p15 259:3    0  106M  0 part /boot/efi
笏披楳nvme0n1p16 259:4    0  913M  0 part /boot

本次验证使用了 Amazon Linux 2023 和 Ubuntu 24.04 的官方 AMI,但与 AMI 无关,在相同位置均出现乱码。

systemctl status sshd
笳・sshd.service - OpenSSH server daemon
     Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; preset: enabled)
     Active: active (running) since Sun 2026-03-20 14:18:54 UTC; 1min 12s ago
       Docs: man:sshd(8)
             man:sshd_config(5)
   Main PID: 1553 (sshd)
      Tasks: 1 (limit: 1067)
     Memory: 2.3M
        CPU: 15ms
     CGroup: /system.slice/sshd.service
             笏披楳1553 "sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups"

如您所见,框线和状态图标均出现了乱码。

原因

#

经检查,这些字符对应如下:

原本 Unicode 乱码
├─ U+251C, U+2500 笏懌楳
└─ U+2514, U+2500 笏披楳
● U+25CF 笳(末尾不正确)

由此可知,本次乱码是因为 UTF-8 的字符串被错误地当作 CP932(Shift_JIS 系)进行了解释。

也就是说,SSM 途径接收到的字符串与 Git Bash 端控制台的页面字符编码设置不一致,导致框线和符号无法正确显示。

Git Bash 端的设置检查与临时对策

#

检查当前 Git Bash 的设置

#

在本次环境中,执行 chcp.com 的结果为 CP932。

如需检查自身 Git Bash 的当前设置,可通过以下命令确认:

chcp.com
現在のコード ページ: 932

临时对策:将控制台字符编码更改为 UTF-8

#
Information

首先请将 session-manager-plugin 更新至最新版,并确认问题是否已解决。
此处介绍的方法为插件无法更新时的临时对策。

无法下载最新版或安装受限的环境用户,可尝试以下命令,将当前页面编码更改为 UTF-8:

chcp.com 65001
Active code page: 65001

在 Git Bash 上直接使用 chcp 无法识别,也无法按预期运行。
这是因为需要显式调用 Windows 标准的 C:\Windows\System32\chcp.com。

参考信息

结果

#

更改控制台字符编码为 UTF-8 后,再次确认发现之前出现乱码的位置已正常输出。

如果更新并使用了最新版 session-manager-plugin,即使不执行 chcp.com 65001,也能正常输出,无乱码。

lsblk
NAME         MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
loop0          7:0    0 27.8M  1 loop /snap/amazon-ssm-agent/12322
loop1          7:1    0   74M  1 loop /snap/core22/2339
loop2          7:2    0 48.1M  1 loop /snap/snapd/25935
nvme0n1      259:0    0    8G  0 disk
├─nvme0n1p1  259:1    0    7G  0 part /
├─nvme0n1p14 259:2    0    4M  0 part
├─nvme0n1p15 259:3    0  106M  0 part /boot/efi
└─nvme0n1p16 259:4    0  913M  0 part /boot
systemctl status sshd
● sshd.service - OpenSSH server daemon
     Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; preset: enabled)
     Active: active (running) since Sun 2026-03-20 15:22:04 UTC; 33s ago
       Docs: man:sshd(8)
             man:sshd_config(5)
   Main PID: 1549 (sshd)
      Tasks: 1 (limit: 1067)
     Memory: 2.3M
        CPU: 15ms
     CGroup: /system.slice/sshd.service
             └─1549 "sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups"

持久化设置

#

如果每次都更改代码页很麻烦,可在 .bashrc 中进行设置,让 Git Bash 启动时自动切换到 UTF-8。

echo 'chcp.com 65001 > /dev/null' >> ~/.bashrc

总结

#

本文介绍了在 Git Bash 中使用 SSM 时出现的乱码原因及处理方法。

要点总结如下:

  • 首先将 session-manager-plugin 更新至最新版
  • 如果使用旧版插件,可能因为 Git Bash 端的页面字符编码导致乱码
  • 在无法更新的环境中,执行 chcp.com 65001 将其设为 UTF-8 是有效的
  • 若需持续使用,可在 .bashrc 中进行设置以实现持久化

过去即使出现乱码,也只能手动查看并对照修正。
最近 EC2 相关操作增多,遇到乱码的频率也提高,因此本文调查了处理方法。
由于找到解决方法耗时较长,希望本文内容能对您有所帮助。
感谢您阅读至此。

豆蔵では共に高め合う仲間を募集しています!

recruit

具体的な採用情報はこちらからご覧いただけます。