如何在GCP虚拟机上自动配置GitHub SSH私钥以克隆仓库?
在GCP Spot虚拟机中自动配置GitHub SSH私钥的最佳实践
核心问题解答
- 直接在启动脚本里写私钥?绝对不行:启动脚本会存在GCP实例元数据中,任何有权限查看实例元数据的人都能拿到你的私钥,完全违反安全最佳实践。
- 用scp传输私钥?没必要:这种方式需要本地与VM保持网络连通,自动化程度低,而且Spot VM可能在任意区域创建,操作起来非常麻烦,不是自动化场景的最优解。
- 正确姿势:用GCP Secret Manager存储私钥,启动脚本拉取配置
具体实现步骤
1. 准备GitHub SSH私钥
生成无密码的SSH私钥(启动脚本需要自动使用,带密码的话无法完成自动化操作):
ssh-keygen -t ed25519 -C "your-github-email@example.com" -N "" -f github_ssh_key
将对应的公钥添加到GitHub账号的SSH密钥列表中。
2. 将私钥上传到GCP Secret Manager
通过GCP控制台或gcloud命令创建新Secret,把生成的私钥内容上传:
gcloud secrets create github-ssh-private-key --data-file=github_ssh_key
3. 给VM服务账号授权
确保Spot VM使用的服务账号拥有读取该Secret的权限:
gcloud projects add-iam-policy-binding YOUR_PROJECT_ID \ --member="serviceAccount:YOUR_VM_SERVICE_ACCOUNT@YOUR_PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/secretmanager.secretAccessor"
4. 编写启动脚本
将以下内容作为启动脚本添加到Spot VM的元数据中:
#!/bin/bash # 配置SSH目录及权限 mkdir -p ~/.ssh chmod 700 ~/.ssh # 从Secret Manager拉取私钥并设置权限 gcloud secrets versions access latest --secret=github-ssh-private-key > ~/.ssh/id_rsa chmod 600 ~/.ssh/id_rsa # 添加GitHub到known_hosts,避免首次克隆的确认提示 ssh-keyscan github.com >> ~/.ssh/known_hosts chmod 644 ~/.ssh/known_hosts # 克隆私有仓库 git clone git@github.com:YOUR_USERNAME/YOUR_PRIVATE_REPO.git
替代方案:用GitHub个人访问令牌(HTTPS方式)
如果觉得SSH配置繁琐,可以改用GitHub个人访问令牌(PAT),同样存入Secret Manager,启动脚本拉取后通过HTTPS克隆:
#!/bin/bash # 从Secret Manager拉取PAT PAT=$(gcloud secrets versions access latest --secret=github-pat) # 克隆仓库 git clone https://${PAT}@github.com/YOUR_USERNAME/YOUR_PRIVATE_REPO.git
内容的提问来源于stack exchange,提问作者Davide
相关产品推荐
相关产品推荐

