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

Cloud Build无法SSH连接启用OS Login的仅内网IP Compute Engine VM

故障排查与解决方案

OS Login兼容性说明

启用OS Login功能的Compute Engine虚拟机完全支持通过Cloud SDK(gcloud命令行)发起SSH连接,连接失败与OS Login特性本身无关,你的故障由两个核心配置问题导致:

  • 目标VM仅配置内部IP,默认gcloud compute ssh会优先尝试连接实例公网IP,必然触发连接超时
  • Cloud Build运行身份缺少OS Login、内网连接所需的权限,且默认公网Cloud Build运行环境无法直接访问VPC内的纯内网实例

具体修复步骤

1. 为Cloud Build服务账号授予必要权限

找到项目内Cloud Build默认服务账号(格式为[你的项目编号]@cloudbuild.gserviceaccount.com),绑定以下IAM角色:

  • 基础SSH连接权限:roles/compute.osLogin,如果脚本需要root执行权限则绑定roles/compute.osAdminLogin
  • 实例访问权限:roles/compute.instanceAdmin.v1
  • (推荐,无需配置私有池)IAP隧道权限:roles/iap.tunnelResourceAccessor,通过IAP TCP转发直接访问内网实例,无需打通VPC网络

2. 修改cloudbuild.yaml配置

在SSH命令中增加内网IP、IAP隧道、关闭主机密钥校验的参数,避免交互阻塞和公网连接尝试,修正后的配置如下:

steps:
- name: 'gcr.io/cloud-builders/gcloud'
  id: Update staging server
  entrypoint: /bin/sh
  args:
  - '-c'
  - |
    set -x && 
    gcloud compute ssh vm_name \
      --zone=us-central1-c \
      --tunnel-through-iap \
      --internal-ip \
      --ssh-flag="-o StrictHostKeyChecking=no" \
      --ssh-flag="-o UserKnownHostsFile=/dev/null" \
      --command='/bin/sh /pullscripts/pull.sh'

可选:不使用IAP的方案

如果你不想走IAP隧道,需要创建Cloud Build私有工作池,将私有池与目标VM所在的VPC建立对等连接,配置路由和防火墙规则允许私有池网段访问VM的22端口,此时可以去掉--tunnel-through-iap参数,保留--internal-ip即可。

之前出现的连接超时、权限拒绝类报错,均为上述配置缺失导致,按步骤配置后即可正常通过Cloud Build触发VM内脚本执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 23:01:39