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

GitLab推送代码至GCP计算实例失败问题排查求助

解决GitLab CI/CD推送代码至Debian虚拟机时的Permission Denied问题

嘿,我看你在把代码通过GitLab CI推送到GCP Debian虚拟机时碰到了Permission denied (publickey)的错误,这事儿我熟,来帮你捋捋~

为啥会报错?

从你贴的流水线输出能看到,sshpass本身是正常运行的,但服务器直接拒绝了密码登录请求,返回了公钥认证失败的提示——这是GCP虚拟机的默认安全配置,它会禁用SSH密码登录,只允许更安全的公钥认证方式。

两种解决方案,推荐第一种更安全的

方案1:改用SSH公钥认证(强烈推荐)

既然你已经生成了SSH密钥并加到GitLab了,不如直接把GitLab Runner的公钥授权给虚拟机,这样既安全又稳定:

  • 第一步:获取GitLab Runner的公钥
    如果用的是GitLab共享Runner,你需要在项目的「Settings > CI/CD > Variables」里添加一个私钥变量(比如叫SSH_PRIVATE_KEY),值就是你生成的私钥内容;如果是自己部署的Runner,直接找Runner所在机器的~/.ssh/id_rsa.pub公钥文件内容。
  • 第二步:把公钥加到虚拟机的授权列表
    先登录到你的GCP虚拟机,然后执行这些命令:
    # 把公钥内容追加到授权文件里,替换成你的公钥字符串
    echo "你的公钥内容" >> ~/.ssh/authorized_keys
    # 必须设置正确的权限,否则公钥认证会失败
    chmod 700 ~/.ssh
    chmod 600 ~/.ssh/authorized_keys
    
  • 第三步:修改.gitlab-ci.yml配置
    删掉sshpass相关的命令,换成SSH代理的方式:
    before_script:
      - apt-get update -qq && apt-get install -y -qq openssh-client
    deploy_stage:
      stage: deploy
      environment: Staging
      only:
        - stage
      script:
        - ls
        # 启动SSH代理并加载私钥
        - eval $(ssh-agent -s)
        - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -
        # 配置已知主机,避免首次连接的确认提示
        - mkdir -p ~/.ssh
        - chmod 700 ~/.ssh
        - ssh-keyscan xx.xxx.xx.xx >> ~/.ssh/known_hosts
        - chmod 644 ~/.ssh/known_hosts
        # 用scp推送代码
        - scp -r . xxxxxx@xx.xxx.xx.xx:/datastore/test
    
    别忘了在GitLab项目的CI/CD变量里添加SSH_PRIVATE_KEY,值就是你的私钥内容,注意不要有多余的空格或换行哦。

方案2:开启虚拟机的密码登录(不推荐,安全性差)

如果你非要用密码方式,那得先把虚拟机的SSH密码登录打开:

  • 登录到虚拟机,修改SSH配置文件:
    sudo nano /etc/ssh/sshd_config
    
    找到这两个配置项,改成下面这样:
    PasswordAuthentication yes
    ChallengeResponseAuthentication no
    
  • 重启SSH服务让配置生效:
    sudo systemctl restart sshd
    
  • 还要给你的虚拟机用户xxxxxx设置密码(GCP默认没给用户设密码):
    sudo passwd xxxxxx
    
    做完这些再跑流水线,应该就能用sshpass登录了。

额外要检查的点

  • 确认GCP虚拟机的防火墙规则允许22端口(SSH)的入站流量,不然连都连不上。
  • 检查/datastore/test目录的权限,确保xxxxxx用户有写入权限:
    sudo chown -R xxxxxx:xxxxxx /datastore/test
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:00:35