AWS CLI执行正常命令返回随机十六进制字符串而非预期输出
问题现象
执行合法的AWS CLI命令时,标准输出被替换为随机十六进制字符串,例如:
- 执行
aws ec2 list-images-in-recycle-bin --region us-west2 --output json,返回b31234fc8... - 执行
aws sts get-caller-identity --output text,得到相同格式的十六进制字符串
但执行无效命令(如 aws fodjf)时,能正常返回帮助错误信息。
排查与解决方法
检查Shell别名或命令劫持
执行type aws查看是否存在自定义别名,确认是否被设置了类似alias aws='aws "$@" | xxd'的管道转换。如果有,删除对应别名并重启Shell,或直接用\aws sts get-caller-identity绕过别名测试。同时检查.bashrc、.zshrc等Shell配置文件,确认是否有自动修改AWS命令输出的脚本逻辑。排除CLI插件或自定义输出配置
检查~/.aws/config文件,确认output字段是否为默认的json/text/table之一。尝试添加--no-cli-plugins参数执行命令(如aws --no-cli-plugins sts get-caller-identity),排除第三方插件对输出的篡改。清理异常环境变量
执行env | grep AWS查看是否存在非标准的AWS相关环境变量,比如AWS_CLI_OUTPUT等可能影响输出的变量。可以在干净的Shell环境中测试:env -i bash --noprofile --norc,之后再执行AWS命令,确认是否是环境变量导致的问题。重新安装/升级AWS CLI
如果上述方法都无效,可能是CLI安装文件损坏。执行aws --version查看当前版本,卸载后重新安装最新稳定版的AWS CLI,或通过包管理器(如brew、apt)升级到最新版本。
内容的提问来源于stack exchange,提问作者hubatish

