You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker内SSH连接AWS堡垒机报ssh_exchange_identification错误

排查思路与修复方案

1. 修复Session Manager插件安装错误

镜像构建阶段安装macOS版本Session Manager插件是最高概率的故障根因。amazon/aws-cli基础镜像基于Amazon Linux 2运行,与macOS二进制的架构、系统依赖完全不匹配,会导致代理进程启动后静默崩溃,直接表现为SSH发送版本标识后连接被重置。

  • 构建镜像时卸载错误安装的mac版本插件,替换为对应CPU架构(x86_64/arm64)的Linux版Session Manager插件
  • 构建完成后在镜像内执行session-manager-plugin --version校验,确认无执行格式错误、依赖缺失报错

不要直接复用宿主机挂载的插件二进制,宿主机与容器OS、架构不一致时二进制无法正常运行。

2. 适配OpenSSH 7.4p1的兼容问题

容器内OpenSSH 7.4p1与高版本(宿主机8.1)存在行为差异,两个已知问题会触发该报错:

  • 7.4版本ProxyUseFdpass参数存在实现bug,会导致ProxyCommand创建的代理套接字数据流被提前截断,必须在SSH参数中显式关闭该配置
  • 7.4版本默认未开启部分SSM会话支持的密钥交换、主机密钥算法,需要手动添加支持
    连接时使用以下SSH参数即可修复兼容问题:
ssh -vvv \
  -o "ProxyCommand=aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'" \
  -o ProxyUseFdpass=no \
  -o KexAlgorithms=+ec2-sha2-nistp256,ec2-sha2-nistp384,ec2-sha2-nistp521 \
  -o HostKeyAlgorithms=+ssh-rsa \
  -o PubkeyAcceptedKeyTypes=+ssh-rsa \
  -o StrictHostKeyChecking=no \
  -o UserKnownHostsFile=/dev/null \
  -o LogLevel=DEBUG3 \
  -N -L ${PORT}:${RDS_ADDRESS}:5432 ec2-user@${BASTION_INSTANCE_ID}

3. 容器运行时配置校验

完成上述修复后按以下顺序逐环节验证:

  • 容器启动时不要挂载只读根目录,保证/tmp目录可写,Session Manager插件运行时会在该路径创建临时套接字文件,权限不足会导致代理进程异常退出
  • 进入容器交互终端手动执行aws ssm start-session --target ${BASTION_INSTANCE_ID},确认可以正常建立SSM会话,排除IAM权限、AWS凭据挂载异常问题
  • 验证EC2 Instance Connect公钥推送逻辑:推送公钥后通过SSM会话进入堡垒机,检查/home/ec2-user/.ssh/authorized_keys文件中存在本次生成的临时公钥,且文件权限为600、属主为ec2-user
  • 执行带debug参数的SSH命令,观察日志确认代理进程正常驻留、SSH版本协商完成、公钥认证通过后,再验证本地端口转发连通性

内容的提问来源于stack exchange,提问作者Daniel Gruszczyk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 11:57:11