使用AWS CDK v2搭建堡垒机访问RDS遇SSH重连失败、psql超时问题
AWS CDK v2堡垒机+RDS连接问题解决方案
问题1:EC2 Instance Connect重复连接权限拒绝
- 原因:EC2 Instance Connect推送的公钥仅在实例中保留60秒,会话结束后会被系统自动清理,再次连接时无有效认证密钥。
- 解决方法:
- 自动推送公钥并连接(推荐,符合安全模型):
编写shell脚本简化操作,保存为connect-bastion.sh:
赋予执行权限:# 替换为你的实例ID、区域和密钥路径 INSTANCE_ID="i-xxxxxx" REGION="us-east-1" KEY_PATH="~/.ssh/id_rsa" aws ec2-instance-connect send-ssh-public-key \ --instance-id $INSTANCE_ID \ --instance-os-user ec2-user \ --ssh-public-key file://${KEY_PATH}.pub \ --region $REGION && \ ssh -i $KEY_PATH ec2-user@$INSTANCE_IDchmod +x connect-bastion.sh,每次运行脚本即可直接连接。 - 持久化密钥(谨慎使用,降低临时密钥安全性):
登录堡垒机后,修改定时任务并添加永久公钥:# 注释清理公钥的定时任务 sudo sed -i '/ec2-instance-connect/d' /etc/cron.d/ec2-instance-connect # 添加你的公钥到authorized_keys echo "你的公钥内容" >> /home/ec2-user/.ssh/authorized_keys # 修复权限 chmod 700 /home/ec2-user/.ssh chmod 600 /home/ec2-user/.ssh/authorized_keys chown ec2-user:ec2-user /home/ec2-user/.ssh /home/ec2-user/.ssh/authorized_keys
- 自动推送公钥并连接(推荐,符合安全模型):
问题2:SSH端口转发绑定失败&psql连接超时
绑定端口失败处理
- 本地22端口是特权端口,普通用户无法绑定,替换为非特权端口(如5432,对应PostgreSQL默认端口),转发命令示例:
# 替换为堡垒机IP、RDS端点 ssh -i ~/.ssh/id_rsa -L 5432:your-rds-endpoint.rds.amazonaws.com:5432 ec2-user@bastion-public-ip - 若必须使用22端口,需用
sudo执行命令,但不推荐。
psql超时处理
- 验证堡垒机到RDS的连通性:
登录堡垒机后执行:nc -zv your-rds-endpoint.rds.amazonaws.com 5432- 若不通:检查RDS安全组,确保允许堡垒机所在安全组的流量访问5432端口;同时确认堡垒机安全组允许出站到RDS的5432端口。
- 检查CDK网络配置:
- 确保堡垒机与RDS在同一VPC内,或VPC间有正确的路由/对等连接。
- 确认RDS的
publicly_accessible设为false,仅允许VPC内资源访问。
- 本地psql连接命令:
端口转发成功后,使用本地端口连接:psql -h localhost -p 5432 -U rds-username -d db-name
内容的提问来源于stack exchange,提问作者Tsar Bomba
相关产品推荐
相关产品推荐

