Terraform创建的AWS EC2实例开放22端口仍无法SSH连接如何解决
故障原因与排查方案
核心根因
你当前使用自定义VPC创建EC2实例,但配置中缺失公网访问相关的网络组件,即使实例绑定了公网IP、安全组开放了22端口,也无法和公网通信,导致SSH连接超时。
排查步骤
- 检查VPC是否绑定Internet网关(IGW)
你的Terraform配置中未定义aws_internet_gateway资源,自定义VPC默认不具备公网访问能力,是本次故障的最常见诱因。 - 检查子网关联的路由表规则
就算存在IGW,你创建的子网默认关联VPC主路由表,主路由表默认只有内网段路由,没有指向IGW的0.0.0.0/0公网路由,公网流量无法正常转发。 - 验证端口连通性
本地执行nc -zv <实例公网IP> 22测试22端口连通性,如果返回连接失败,可确定是网络层问题,和SSH密钥权限无关。 - 核对VPC网络ACL规则
确认子网关联的网络ACL入方向放行22端口、出方向放行1024-65535临时端口,默认VPC网络ACL是允许所有流量的,如果你手动修改过规则需要重点核对。
配置修复方案
在你的Terraform配置中新增以下资源,补充公网访问能力:
# 创建Internet网关并绑定到VPC resource "aws_internet_gateway" "demo-igw" { vpc_id = aws_vpc.demo-vpc.id tags = { Name = "Ec2-EFront-Demo-IGW" } } # 创建公网路由表,配置公网流量转发规则 resource "aws_route_table" "public_route_table" { vpc_id = aws_vpc.demo-vpc.id route { cidr_block = "0.0.0.0/0" gateway_id = aws_internet_gateway.demo-igw.id } tags = { Name = "Public-Route-Table" } } # 将业务子网关联到公网路由表 resource "aws_route_table_association" "subnet_public_assoc" { subnet_id = aws_subnet.efront-subnet.id route_table_id = aws_route_table.public_route_table.id }
更新配置后执行terraform apply生效,等待2分钟左右路由规则同步后,使用以下命令连接实例即可(Ubuntu镜像默认SSH用户为ubuntu):
ssh -i /<path-to-ssh>/.ssh/id_rsa ubuntu@<你的实例公网IP>
内容的提问来源于stack exchange,提问作者Nayden Van
相关产品推荐
相关产品推荐

