GitLab CI主机密钥验证问题:EC2实例代码部署失败
解决GitLab CI部署EC2时Git克隆失败的问题
问题根源
你当前的脚本只处理了CI到EC2的SSH登录,但EC2实例本身没有配置访问GitLab仓库的有效凭据,而且EC2首次访问GitLab时的主机密钥验证也没处理,导致克隆失败。
正确解决步骤
1. 生成EC2专用的GitLab访问密钥对
在本地终端生成仅用于EC2访问GitLab的SSH密钥(不要复用你本地的密钥,遵循权限最小化原则):
ssh-keygen -t ed25519 -f ec2-gitlab-key -C "ec2-deploy@your-domain.com"
生成过程中不要设置密码,直接按回车跳过。生成后会得到两个文件:
ec2-gitlab-key:私钥(后续要传到GitLab CI变量)ec2-gitlab-key.pub:公钥(要添加到GitLab仓库)
把公钥内容复制到GitLab仓库的Deploy Keys中:
- 进入GitLab仓库 → 设置 → Deploy Keys → 添加密钥
- 粘贴公钥内容,填写名称,若需要推送权限则勾选"允许写入"
2. 将私钥存入GitLab CI变量
进入GitLab项目的设置 → CI/CD → 变量,添加一个新变量:
- 变量名:
GITLAB_SSH_KEY - 变量值:粘贴本地生成的
ec2-gitlab-key私钥的全部内容 - 勾选"保护变量"和"掩码变量",防止密钥泄露
3. 修改GitLab CI配置脚本
更新你的.gitlab-ci.yml,确保把GitLab的SSH密钥传递到EC2并配置好环境:
stages: - deploy deploy-job: stage: deploy script: # 处理EC2登录用的密钥 - cat $SSH_KEY > ec2-cred.pem && chmod 400 ec2-cred.pem # 远程执行EC2上的配置与克隆操作 - | ssh -o StrictHostKeyChecking=no -i ec2-cred.pem ubuntu@id-amazon.com << 'EOF' # 初始化SSH目录并设置正确权限 mkdir -p ~/.ssh && chmod 700 ~/.ssh # 写入GitLab访问私钥 echo "$GITLAB_SSH_KEY" > ~/.ssh/id_ed25519 && chmod 600 ~/.ssh/id_ed25519 # 提前添加GitLab主机密钥到已知列表,避免验证失败 ssh-keyscan gitlab.com >> ~/.ssh/known_hosts && chmod 644 ~/.ssh/known_hosts # 执行克隆操作 git clone git@gitlab.com:repo/test.git EOF
4. 额外检查项
- 确认EC2实例的安全组允许**出站SSH(端口22)**到
gitlab.com,否则网络连接会被阻断 - 核对GitLab仓库地址
git@gitlab.com:repo/test.git是否正确,仓库是否存在 - 确保EC2上的
ubuntu用户对克隆目标目录有写入权限
内容的提问来源于stack exchange,提问作者andreas seandres
相关产品推荐
相关产品推荐

