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

CircleCI 1.0迁移至2.0:部署SSH密钥不可用问题求助

CircleCI 2.0迁移后SSH密钥无法用于Capistrano部署的解决方案

我来帮你搞定这个问题——你遇到的核心矛盾是CircleCI 2.0不会自动把项目配置的SSH密钥注入构建容器,而且就算密钥存在,Capistrano也需要正确的SSH代理环境才能调用它们。

问题根源

你之前移除add_ssh_keys步骤是关键失误:CircleCI 2.0不会默认把项目SSH权限里配置的密钥放到容器的~/.ssh目录下,必须通过add_ssh_keys步骤完成挂载。另外,就算密钥成功挂载,当前shell环境也没把密钥加载到SSH代理中,导致Capistrano触发认证失败。

具体修复步骤

  1. 恢复add_ssh_keys步骤
    这是CircleCI 2.0将项目配置的SSH密钥同步到容器~/.ssh目录的必要操作,必须放在部署步骤之前。

  2. 部署前启动SSH代理并加载密钥
    在执行bundle exec cap staging deploy前,需要启动SSH代理并把密钥添加进去,确保当前环境能调用密钥完成认证。

  3. 开启Capistrano的SSH代理转发
    在Capistrano的阶段配置文件(比如config/deploy/staging.rb)中添加代理转发配置,让Capistrano通过SSH代理使用密钥。

修改后的配置示例

CircleCI config.yml中的部署片段

# Deploy if develop
- add_ssh_keys
- deploy:
    name: Deploy to staging if branch is develop
    command: |
      if [ "${CIRCLE_BRANCH}" == "develop" ]; then
        eval `ssh-agent` && ssh-add ~/.ssh/id_rsa* && bundle exec cap staging deploy
      else
        echo "Not on develop branch => Not deploying to staging"
      fi

Capistrano staging配置文件

# config/deploy/staging.rb
set :ssh_options, forward_agent: true

修复逻辑说明

  • add_ssh_keys:负责把你在CircleCI项目里配置的SSH密钥复制到构建容器的~/.ssh目录,让后续命令能访问到密钥。
  • eval ssh-agent && ssh-add ~/.ssh/id_rsa*:启动SSH代理进程,把密钥加载到代理中,这样Capistrano执行远程命令时可以通过代理调用密钥。
  • forward_agent: true:告诉Capistrano使用本地SSH代理完成认证,既避免在远程服务器存密钥,又能保证认证流程正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:40:28