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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 14:20:24