删除默认VPC后如何从零构建可SSH访问的AWS VPC及EC2实例
我来一步步帮你排查并搭建能正常通过SSH访问EC2的VPC,咱们从基础配置开始捋,确保每一步都没遗漏:
一、从零搭建可SSH访问的VPC完整流程
1. 创建VPC
- 登录AWS控制台进入VPC服务,点击「创建VPC」
- 推荐选择「VPC和更多」模式(新手友好,会自动关联子网、路由表等基础资源)
- 核心配置项:
- VPC名称:自定义(比如
My-SSH-VPC) - IPv4 CIDR:填入你需要的
10.10.10.0/24 - 子网配置:至少创建1个公有子网(必须标记为公有,否则EC2无法自动获取公网IP),子网CIDR可从主VPC网段划分,比如
10.10.10.0/26 - 其余保持默认,点击创建即可
- VPC名称:自定义(比如
2. 配置互联网网关(IGW)
- 如果用了「VPC和更多」模式,IGW会自动创建并绑定VPC;如果是手动创建:
- 进入「互联网网关」页面,点击「创建互联网网关」命名后完成创建
- 选中刚创建的IGW,点击「附加到VPC」,选择你的目标VPC完成绑定
3. 配置公有子网的路由表(关键!)
这是很多人忽略的核心步骤:公有子网的路由表必须包含指向IGW的默认路由,否则EC2即使有公网IP也无法连通互联网
- 进入「路由表」页面,找到和公有子网关联的路由表(名称通常带
Public标识) - 点击「路由」标签页,编辑路由规则,添加一条:
- 目标:
0.0.0.0/0 - 目标类型:选择你创建的互联网网关
- 目标:
- 确认该路由表已经关联到你的公有子网(在「关联」标签页查看,未关联则手动绑定)
4. 配置安全组
虽然你说设置了全网开放,但要确保规则方向和端口完全正确:
- 进入「安全组」页面,创建新安全组(或使用现有)并关联目标VPC
- 入站规则:添加一条规则
- 类型:SSH(端口22)
- 源:
0.0.0.0/0(测试阶段全网开放,后续可改为你的本地IP提高安全性) - 协议:TCP
- 出站规则:默认允许所有流量即可(如果修改过,需确保允许
0.0.0.0/0的所有出站流量) - 划重点:安全组是状态化的,入站允许SSH后,出站的SSH响应流量会自动放行,无需额外配置
5. 配置网络ACL(NACL)
NACL是无状态的,所以入站和出站规则都要明确放行:
- 进入「网络ACL」页面,找到关联目标VPC的NACL
- 入站规则:添加两条高优先级规则(比如优先级100、101)
- 规则100:允许TCP端口22,源
0.0.0.0/0 - 规则101:允许所有ICMP流量(可选,用于ping测试连通性),源
0.0.0.0/0
- 规则100:允许TCP端口22,源
- 出站规则:同样添加两条高优先级规则
- 规则100:允许TCP端口1024-65535(SSH返回流量使用的临时端口段),目标
0.0.0.0/0 - 规则101:允许所有ICMP流量,目标
0.0.0.0/0
- 规则100:允许TCP端口1024-65535(SSH返回流量使用的临时端口段),目标
- 注意:NACL默认存在一条优先级最低的「拒绝所有」规则,必须把允许规则放在前面才会生效
6. 启动EC2实例的关键配置
- 进入EC2控制台点击「启动实例」,选择合适的AMI(比如Amazon Linux 2)和实例类型
- 网络设置:
- VPC:选择你新建的VPC
- 子网:选择刚才创建的公有子网
- 自动分配公网IP:必须选择「启用」(公有子网默认启用,但务必确认)
- 安全组:选择你刚才配置好的允许SSH的安全组
- 密钥对:必须选择已有的密钥对(或新建),没有匹配的密钥对绝对无法SSH连接!这是高频踩坑点
- 完成配置后启动实例,等待实例进入「运行中」状态
二、针对你当前问题的排查重点
你已经完成了大部分配置,大概率是遗漏了以下某一点:
- 公有子网的路由表是否包含
0.0.0.0/0指向IGW的规则?没有这条规则的话,EC2的公网IP只是个“摆设”,无法路由到互联网 - NACL的出站规则是否放行TCP 1024-65535端口?因为SSH是客户端发起22端口请求,返回流量用临时端口,NACL无状态必须手动放行
- EC2实例是否部署在公有子网?如果是私有子网,即使有公网IP也需要NAT网关才能连通公网
- 本地私钥是否正确?确保本地的私钥和EC2绑定的公钥匹配,且Linux/macOS下要设置私钥权限为
chmod 400 your-key.pem(权限过宽会被SSH拒绝)
三、测试SSH连接
实例运行稳定后,获取其公网IP,在本地终端执行:
ssh -i your-key.pem ec2-user@<你的EC2公网IP>
(注:不同AMI的默认用户名不同,Amazon Linux 2用ec2-user,Ubuntu用ubuntu,CentOS用centos,根据你的镜像调整)
内容的提问来源于stack exchange,提问作者user14389292




