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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 07:57:03