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

GitHub Actions部署GCP实例遇SSH连接失败问题求助

排查GitHub Actions SCP到GCP实例权限拒绝问题的方案

以下是针对性的根因排查步骤,按优先级依次推进:

1. 验证GCP防火墙IP白名单规则

GitHub Actions Ubuntu运行器的IP为动态分配,若GCP实例的SSH端口(22)防火墙规则仅允许旧IP段访问,会导致连接被拦截:

  • 临时修改GCP防火墙规则,将22端口开放至0.0.0.0/0进行测试,若SCP成功则确认是IP白名单问题。
  • 后续需添加GitHub官方公布的Actions运行器IP段至GCP防火墙允许列表。

2. 检查GCP实例SSH元数据与目标目录权限

  • SSH密钥格式验证:登录GCP控制台,检查实例元数据的ssh-keys条目格式是否为用户名:ssh-rsa 公钥内容 备注(例如ubuntu:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ... runner@github),格式错误会导致密钥无法被识别。
  • 目标目录权限检查:登录GCP实例,确认SCP目标目录(如/var/lib/tomcat/webapps/)对SSH登录用户(如ubuntu)有写入权限。若需管理员权限,可拆分SCP命令为两步:
    scp -i key.pem code.war ubuntu@instance-ip:/tmp/
    ssh -i key.pem ubuntu@instance-ip sudo mv /tmp/code.war /var/lib/tomcat/webapps/
    

3. 确认GitHub Actions密钥配置完整性

  • 私钥存储验证:检查GitHub Secrets中存储的私钥是否完整,需包含-----BEGIN RSA PRIVATE KEY-----和-----END RSA PRIVATE KEY-----及中间所有换行内容,避免复制时丢失换行符。
  • 私钥文件生成命令:确保Actions脚本中生成私钥文件的命令正确保留格式,示例:
    echo "${{ secrets.SSH_PRIVATE_KEY }}" > key.pem
    chmod 600 key.pem
    
    若换行符丢失,可改用printf "%s" "${{ secrets.SSH_PRIVATE_KEY }}" > key.pem。

4. 开启SCP调试模式获取详细日志

在Actions脚本中添加-v参数开启调试,查看具体报错环节:

scp -v -i key.pem code.war ubuntu@instance-ip:/target/path/

从输出日志可定位是密钥验证失败、连接被拦截还是目录权限问题。

5. 检查GCP实例SSH服务配置

登录GCP实例,验证/etc/ssh/sshd_config关键配置:

  • 确认PubkeyAuthentication yes未被注释,PasswordAuthentication no(密钥登录场景)。
  • 检查AllowUsers/DenyUsers规则是否限制了SSH登录用户。
  • 修改配置后执行sudo systemctl restart sshd重启服务。

6. 适配GitHub运行器环境变化

2022年12月GitHub可能更新了Ubuntu运行器版本(如从20.04升级至22.04),新环境SSH客户端默认加密算法可能与GCP实例不兼容,可指定兼容算法测试:

scp -o KexAlgorithms=diffie-hellman-group-exchange-sha256 -i key.pem code.war ubuntu@instance-ip:/target/path/

7. 本地环境交叉验证

将GitHub Secrets中的私钥导出至本地,执行与Actions完全一致的SCP命令:

  • 若本地成功,说明问题出在GitHub Actions运行器环境;
  • 若本地失败,需重新排查GCP实例的密钥配置与防火墙规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 01:55:14