基于Google Compute Engine与Github的CI/CD管道SSH连接故障排查求助
以下是你可能遗漏的关键配置项:
Cloud Build服务账号权限不足
Cloud Build默认使用的服务账号(格式为[你的项目编号]@cloudbuild.gserviceaccount.com)需要具备Compute Instance Admin(v1)或至少Compute OS Login Admin权限,才能通过SSH访问GCE实例。若采用OS Login方式,需同时确保目标实例已启用OS Login(在实例详情的「安全」标签页中检查enable-oslogin元数据是否设为TRUE)。实例SSH密钥/OS Login配置缺失
未启用OS Login时,需手动将Cloud Build服务账号的公钥添加到实例的~/.ssh/authorized_keys文件中;更推荐启用OS Login,避免手动管理密钥的繁琐。同时确认实例元数据中已开启OS Login。实例网络访问限制
若实例仅拥有内部IP,Cloud Build默认网络无法直接访问,需配置Cloud Build使用与实例相同的VPC,或设置VPC对等连接。此外,确保实例拥有可访问的外部IP,且SSH命令中指定了正确的实例区域(--zone参数)。防火墙规则配置不完整
虽然开放了22端口,但需确认防火墙规则的目标标签与实例标签匹配(或设为「网络中的所有实例」),来源范围包含Cloud Build的IP段(或测试阶段临时允许0.0.0.0/0,生产环境需缩小范围)。注意SSH仅需TCP协议,UDP无需开放。SSH命令参数错误
检查Cloud Build步骤中的gcloud compute ssh命令,是否遗漏了--zone(实例所在区域)、--project(跨项目时)等必要参数;若使用自定义密钥,需确保密钥文件已在Cloud Build环境中正确加载。实例SSH服务异常
手动登录实例(若可行),检查sshd服务是否正常运行,/etc/ssh/sshd_config中是否允许密钥登录,以及是否使用了正确的登录用户(GCE实例默认用户通常为ubuntu、debian等,而非root)。
另外,针对你触发实例执行pull.sh的需求,推荐采用更简洁安全的方案:使用Cloud Functions + Pub/Sub触发代码推送事件,再通过gcloud compute instances execute-command直接在实例上执行脚本,无需建立SSH连接,能避免SSH相关的权限和网络问题。
内容的提问来源于stack exchange,提问作者Keval Karia

