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

Cloud Build容器注入SSH密钥失败:格式无效问题求助

Cloud Build容器注入SSH密钥格式错误解决方案

核心问题分析

你遇到的Load key "/root/.ssh/id_rsa": invalid format错误,本质是SSH密钥在从本地→Secret Manager→Cloud Build环境变量→容器文件的传递过程中,换行符被丢失或篡改,导致密钥格式失效。

针对性解决方案

方案1:直接从Secret Manager写入密钥文件(推荐)

跳过环境变量传递环节,直接用gcloud secrets versions access命令将密钥写入容器内的SSH目录,避免换行丢失:

mkdir -p /root/.ssh && chmod 0700 /root/.ssh
# 读取私钥并写入文件
gcloud secrets versions access latest --secret=private-key > /root/.ssh/id_rsa
# 读取公钥并写入文件
gcloud secrets versions access latest --secret=public-key > /root/.ssh/id_rsa.pub
# 设置正确的权限(SSH对文件权限要求严格)
chmod 400 /root/.ssh/id_rsa
chmod 600 /root/.ssh/id_rsa.pub

前置要求:

  • Cloud Build服务账号需拥有roles/secretmanager.secretAccessor权限,执行以下命令授权:
    gcloud projects add-iam-policy-binding YOUR_PROJECT_ID \
      --member=serviceAccount:YOUR_PROJECT_NUMBER@cloudbuild.gserviceaccount.com \
      --role=roles/secretmanager.secretAccessor
    

方案2:修复环境变量转储密钥的命令

如果必须通过环境变量传递密钥,用printf替代echo——echo会自动添加换行或篡改原有换行,而printf "%s" "$VAR"能完整保留密钥的原始格式:

mkdir -p /root/.ssh && chmod 0700 /root/.ssh
# 用printf写入私钥,保留原始格式
printf "%s" "$CONTAINER_PRIVATE_KEY" > /root/.ssh/id_rsa
# 用printf写入公钥
printf "%s" "$CONTAINER_PUBLIC_KEY" > /root/.ssh/id_rsa.pub
# 设置权限
chmod 400 /root/.ssh/id_rsa
chmod 600 /root/.ssh/id_rsa.pub

Cloud Build配置注意事项:

在cloudbuild.yaml中需正确配置Secret引用,避免变量替换失效:

steps:
  - name: 'gcr.io/cloud-builders/gcloud'
    entrypoint: 'bash'
    args:
      - '-c'
      - |
        mkdir -p /root/.ssh && chmod 0700 /root/.ssh
        printf "%s" "$_PRIVATE_KEY" > /root/.ssh/id_rsa
        printf "%s" "$_PUBLIC_KEY" > /root/.ssh/id_rsa.pub
        chmod 400 /root/.ssh/id_rsa
        chmod 600 /root/.ssh/id_rsa.pub
        # 执行你的SSH远程命令
        ssh -o StrictHostKeyChecking=no user@remote-host "your-command"
    secrets:
      - secretEnv:
          _PRIVATE_KEY: projects/YOUR_PROJECT_ID/secrets/private-key/versions/latest
          _PUBLIC_KEY: projects/YOUR_PROJECT_ID/secrets/public-key/versions/latest
options:
  logging: CLOUD_LOGGING_ONLY

验证方法(测试用,完成后移除)

在Cloud Build步骤中添加密钥内容检查,确认传递后的密钥与本地一致:

cat /root/.ssh/id_rsa
# 对比本地密钥,看是否存在换行丢失、字符替换等问题

关键注意点

  • SSH密钥文件对权限要求极高,必须确保id_rsa为400、id_rsa.pub为600,否则会触发权限错误。
  • 创建Secret时直接用gcloud secrets create --data-file=本地密钥文件,不要用echo管道——echo会处理换行符,导致Secret存储的密钥本身就有问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 12:02:17