使用Boto3创建AWS EC2实例后无法SSH连接,求解决方法
无法SSH连接到Boto3创建的EC2实例?排查与配置指南
你的EC2实例创建代码本身没问题,但SSH连不上基本都是几个关键配置环节没到位,咱们一步步来排查和补全:
1. 先检查安全组(Security Group)配置
这是最常见的“坑”!如果你创建实例时没指定SecurityGroupIds参数,AWS会自动分配默认安全组,但默认组只允许同组内的流量,压根没开放SSH的22端口。
你得确保安全组有这条入站规则:
- 规则类型:SSH(22)
- 来源:建议设为你的本地公网IP(更安全),测试阶段可以暂时用
0.0.0.0/0(别在生产环境这么干)
要是想在代码里直接指定安全组,修改代码加上SecurityGroupIds参数就行:
instance = ec2.create_instances( ImageId='ami-15e9c770', MinCount=1, MaxCount=1, InstanceType='t2.micro', KeyName="xyz", Placement={'AvailabilityZone':'us-east-2b'}, SecurityGroupIds=['sg-xxxxxxxx'] # 替换成你的安全组ID )
2. 确认密钥对(Key Pair)没搞错
- 你用的
KeyName="xyz"必须是us-east-2区域创建的密钥对,而且本地得有对应的私钥文件(比如xyz.pem) - 私钥文件权限必须改对!Linux/macOS下执行
chmod 400 xyz.pem,不然SSH会直接拒绝连接 - 连接时的默认用户名要对应对:Amazon Linux 2用
ec2-user,Ubuntu用ubuntu,CentOS用centos,别瞎试用户名
3. 验证实例的网络可达性
- 先看实例有没有公网IP:去EC2控制台看实例的“公网IPv4地址”,如果没有,要么给实例分配弹性IP,要么检查子网的“自动分配公网IP”选项是不是开着的
- 确认实例状态是
running,而且“状态检查”显示通过 - 试试ping实例的公网IP,如果ping不通,基本就是安全组或子网路由的问题
4. 检查子网的路由表
如果实例在私有子网,得通过NAT网关才能连公网;如果是公有子网,路由表里必须有指向互联网网关(IGW)的路由条目,不然实例根本出不了网
5. 看系统日志找深层问题
要是以上都排查过还是连不上,去EC2控制台看实例的系统日志,看看有没有启动失败、SSH服务异常这类信息,能帮你定位更隐蔽的问题
内容的提问来源于stack exchange,提问作者cbhangale
相关产品推荐
相关产品推荐

