本地AWS SSM会话立即终止问题排查求助
解决SSM端口转发会话自动终止无输出问题
1. 检查本地端口占用情况
本地5432端口可能被PostgreSQL服务或其他进程占用,导致端口转发无法建立。执行以下命令检查:
lsof -i :5432
如果有输出显示占用进程,修改端口转发命令中的localPortNumber为未被占用的端口(如5433):
aws ssm start-session \ --target <ec2 instance id> \ --profile <my local dev profile> \ --document-name AWS-StartPortForwardingSessionToRemoteHost \ --parameters '{"host":["<My RDS PSQL endpoint>"], "portNumber":["5432"], "localPortNumber":["5433"]}' \ --debug
2. 验证SSM插件架构兼容性
Apple Silicon为arm64架构,确保安装的SSM插件是对应版本:
- 卸载旧版本(如果是x86版本):
sudo rm -rf /usr/local/sessionmanagerplugin
- 下载并安装arm64版本:
curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/mac_arm64/session-manager-plugin.pkg" -o "session-manager-plugin.pkg" sudo installer -pkg session-manager-plugin.pkg -target /
- 验证安装:
session-manager-plugin --version
3. 修正参数JSON格式
Mac终端中双引号易被解析,建议用单引号包裹整个parameters参数,避免转义问题:
aws ssm start-session \ --target <ec2 instance id> \ --profile <my local dev profile> \ --document-name AWS-StartPortForwardingSessionToRemoteHost \ --parameters '{"host":["<你的RDS端点>"], "portNumber":["5432"], "localPortNumber":["5432"]}' \ --debug
确保host值是完整的RDS端点字符串,无多余符号。
4. 检查EC2实例SSM代理版本
旧版本SSM代理可能存在端口转发兼容性问题,在EC2实例上执行:
amazon-ssm-agent -version
如果版本低于3.2.x,更新代理:
sudo yum update amazon-ssm-agent # Amazon Linux 2 sudo systemctl restart amazon-ssm-agent
5. 确认网络与安全组配置
- 确保EC2实例的安全组允许出站访问RDS实例的5432端口
- 确保RDS实例的安全组允许入站来自EC2实例安全组的5432端口
6. 验证IAM权限
确认EC2实例的实例角色包含以下权限:
AmazonSSMManagedInstanceCore托管策略(涵盖SSM会话基础权限)- 额外添加自定义策略,允许使用
AWS-StartPortForwardingSessionToRemoteHost文档:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ssm:StartSession", "Resource": [ "arn:aws:ec2:*:*:instance/<EC2实例ID>", "arn:aws:ssm:*:*:document/AWS-StartPortForwardingSessionToRemoteHost" ] } ] }
内容的提问来源于stack exchange,提问作者El_bosteador
相关产品推荐
相关产品推荐

