无法通过GitHub Action连接AWS EC2实例问题求助
解决GitHub Action部署AWS EC2连通性失败的问题
核心误区:别用ping测试连通性
AWS EC2安全组默认拦截ICMP协议请求(ping依赖ICMP),所以ping显示100%丢包是正常现象——这并不代表网络不通,只是协议被安全规则拦截了。请直接改用端口连通性测试替代ping。
具体修复步骤
1. 替换工作流中的连通性测试命令
把原步骤里的ping <EC2_IP>换成以下任意一种端口测试命令:
- 用
nc测试SSH端口(22):nc -zv <EC2_IP> 22 - 用
telnet测试SSH端口:telnet <EC2_IP> 22 - 用SSH静默测试连接:
ssh -o ConnectTimeout=5 -o BatchMode=yes <EC2_USER>@<EC2_IP> echo "Connected" || exit 1
2. 确认GitHub Action的IP访问权限
GitHub Action的运行机器来自GitHub的托管IP池,即使你把SSH规则源设为0.0.0.0/0,仍可能遇到实例级防火墙拦截:
- 先保持
0.0.0.0/0的SSH规则,确认Action能正常连接后,再通过GitHub官方公布的IP范围(无需外链,可在GitHub Docs中搜索“GitHub IP addresses”)缩小安全组允许的源范围。
3. 检查EC2实例本地防火墙
登录EC2实例,排查本地防火墙是否拦截了SSH:
- 针对
ufw防火墙:
确保sudo ufw status22/tcp规则为允许状态,且未限制特定IP。 - 针对
iptables防火墙:
确认存在允许sudo iptables -L INPUT -vtcp dpt:22的规则,无全局拒绝类条目。
4. 二次验证GitHub Secrets信息
务必核对以下Secrets的准确性:
- EC2公网IP/域名是否正确
- SSH用户名(Ubuntu实例默认是
ubuntu,Amazon Linux默认是ec2-user) - SSH私钥是否为完整PEM格式(需保留开头
-----BEGIN RSA PRIVATE KEY-----和结尾-----END RSA PRIVATE KEY-----,无换行丢失)
5. 排查EC2实例网络基础配置
- 确认实例处于运行中状态,已分配公网IP
- 检查实例所属VPC是否关联互联网网关(IGW),路由表是否指向IGW
- 在实例内部执行
ping 8.8.8.8,验证实例自身能否访问公网
调试技巧
如果问题仍未解决,在GitHub Action步骤中添加SSH详细日志输出:
ssh -vvv <EC2_USER>@<EC2_IP>
通过日志可定位连接过程中的具体错误环节(比如密钥验证失败、端口被拒等)。
内容的提问来源于stack exchange,提问作者HUY PHAM MINH
相关产品推荐
相关产品推荐

