GitLab CI/CD连接EC2服务器超时,请求技术指导
解决GitLab CI/CD连接EC2 SSH超时问题
你遇到的错误是:ssh: 连接到主机 ****** 22端口:连接超时,按以下步骤排查解决:
网络层面排查(最常见诱因)
- 检查EC2安全组:确保入站规则允许GitLab Runner的IP访问22端口。如果用GitLab共享Runner,需添加Runner的IP段;自托管Runner则添加Runner服务器的公网IP。
- 检查EC2网络ACL:确认入站、出站规则都放行22端口流量(网络ACL默认拒绝所有,别漏加规则)。
- 手动验证Runner网络:在GitLab Runner所在服务器执行
ssh ubuntu@$SERVER_IP,看是否同样超时,排除Runner本身的网络限制。
CI变量配置检查
- 确认
SSH_PRIVATE_KEY变量未勾选"保护变量"(除非你的执行分支是受保护分支),否则非保护分支无法读取该变量。 - 核对
SERVER_IP变量:必须是EC2的公网IP/弹性IP,内网IP无法被外部的GitLab Runner访问。
优化SSH配置与调试
调整你的CI脚本,增加网络测试和SSH详细日志,方便定位问题:
before_script: - 'which ssh-agent || ( apt-get install -qq openssh-client )' - eval $(ssh-agent -s) - echo "${SSH_PRIVATE_KEY}" | tr -d '\r' | ssh-add - > /dev/null - mkdir -p ~/.ssh - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\tUserKnownHostsFile /dev/null\n\n" > ~/.ssh/config' # 先测试EC2网络连通性 - ping -c 3 $SERVER_IP script: # 加-vv输出SSH详细日志,方便排查认证/连接细节 - ssh -vv ubuntu@$SERVER_IP "echo 连接成功"
其他排查点
- 确认EC2实例处于正常运行状态,公网IP未被意外释放。
- 如果EC2使用堡垒机/代理,需在SSH命令中添加代理参数,或在
.ssh/config中配置代理规则。
内容的提问来源于stack exchange,提问作者oFreed
相关产品推荐
相关产品推荐

