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

从Bitbucket Pipelines通过Google服务账号SSH登录Compute Engine实例遇权限问题

排查Bitbucket Pipelines SSH登录GCE实例权限拒绝的问题

我之前帮团队排查过几乎一模一样的问题——本地能正常连,但Pipelines一直报权限拒绝,大概率是这几个点出了问题,你可以挨个排查:

  • 私钥权限太宽松
    SSH对私钥的权限要求特别严格,必须是600(只有所有者可读可写)。在Pipelines中,如果你是把私钥从变量导出到文件,一定要记得设置权限:

    echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa
    chmod 600 ~/.ssh/id_rsa
    

    没做这一步的话,SSH会直接拒绝使用这个密钥,这是最常见的坑。

  • Bitbucket变量中私钥的格式问题
    如果你把私钥存在Bitbucket的仓库/工作区变量里,要注意私钥是多行文本。粘贴时有没有完整保留所有内容?包括开头的-----BEGIN RSA PRIVATE KEY-----和结尾的-----END RSA PRIVATE KEY-----,中间的换行也不能丢。有些时候变量框会自动吃掉换行,导致密钥直接失效。

  • GCE防火墙限制了Bitbucket的IP
    GCE实例的防火墙默认可能只允许你本地IP访问22端口,但Bitbucket Pipelines的运行环境IP属于特定的动态IP段。你需要在GCE防火墙规则里,把Bitbucket Pipelines的IP范围加入到允许SSH访问的规则中。

  • 元数据公钥的用户名不匹配
    你在GCE实例元数据里添加的公钥格式应该是ssh-rsa [公钥内容] [用户名],这里的用户名要和你在Pipelines中SSH登录用的用户名完全一致(比如默认的ubuntu或者自定义用户)。如果用户名不匹配,GCE会直接拒绝登录请求。

  • SSH首次连接的主机密钥验证
    在Pipelines中第一次连接GCE实例时,SSH会因为主机密钥未知而拒绝连接。测试环境可以临时跳过验证:

    ssh -o StrictHostKeyChecking=no ubuntu@[你的实例IP]
    

    生产环境建议提前把主机密钥加到known_hosts文件里,避免安全风险。

  • GCE实例的SSH daemon配置
    检查实例上的/etc/ssh/sshd_config文件,看看有没有AllowUsers/DenyUsers这类限制规则,是不是把你登录用的用户排除了?另外要确保PubkeyAuthentication yes是开启状态。

建议先从私钥权限开始排查,这是最容易犯也最容易解决的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 06:17:33