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

Amazon Linux 2 EC2实例SSH连接超时问题排查求助

解决EC2 SSH连接超时问题的排查步骤

1. 验证公网IP变量的准确性

  • 执行curl ifconfig.me或curl ipinfo.io/ip获取当前真实公网IP,对比Terraform变量var.my_ip的值是否完全一致。动态IP环境下IP可能已变更,需更新变量后执行terraform apply重新部署安全组。

2. 检查EC2实例的网络配置

  • 确认实例已分配公网IP:在EC2控制台实例详情页查看「IPv4公网IP」字段,若无值需分配弹性IP,或确保实例所在子网开启了「自动分配公网IP」选项。
  • 再次验证子网关联的路由表:确认子网绑定的路由表存在指向0.0.0.0/0的路由条目,且目标为Internet Gateway(注意是子网的路由表,而非VPC主路由表)。

3. 安全组与网络ACL校验

  • 确认EC2实例已关联web_sg安全组:在实例详情的「安全组」模块检查是否包含目标安全组,避免实例误关联了未开放22端口的其他安全组。
  • 检查VPC网络ACL(NACL):若自定义了NACL,需确保入站规则允许来自你的公网IP的22端口流量,同时出站规则允许所有响应流量(SSH连接需要双向通信)。

4. 实例内部SSH服务排查

  • 通过EC2控制台的「系统日志」或「获取实例屏幕截图」,查看SSH服务是否正常启动,有无启动失败的报错信息。
  • 检查实例内部防火墙(如iptables、ufw):确认未禁止22端口的入站流量,必要时执行sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT临时放行。

你的Terraform代码优化建议

web_sg的配置逻辑没问题,但可以改用Terraform现代语法(移除插值语法):

cidr_blocks = [var.my_ip]

另外,db_sg未配置出站规则,虽然AWS默认安全组会允许所有出站,但显式添加规则更严谨:

resource "aws_security_group" "db_sg" {
  name   = "db_sg"
  vpc_id = aws_vpc.vpc.id

  ingress {
    description     = "Allow only MySQL traffic from web_sg "
    from_port       = 3306
    to_port         = 3306
    protocol        = "tcp"
    security_groups = [aws_security_group.web_sg.id]
  }

  egress {
    description = "Allow all outbound traffic"
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }
}

内容的提问来源于stack exchange,提问作者zummi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 16:32:28