git - 如何使用不同的 SSH 密钥在 CircleCI 中克隆第二个 GitHub 存储库(作为主克隆或作为子模块)?
问题描述
我在 CircleCI 中构建了一个 GitHub 项目,它需要克隆另一个存储库,也在 GitHub 中。第二个仓库添加了一个不同的 SSH 密钥作为Deploy Key。
我尝试添加没有域的密钥并使用 指定它GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa_<somehash>"
,但即使这样我也得到了Permission denied (publickey)
.
解决方案
问题似乎是 CircleCI 使用ssh-agent
,至少对于github.com
主机。代理可能会对此主机有所不同,因为它是正在构建的主存储库的来源,并且可能有一些集成逻辑来与该特定主机进行身份验证。其他 CI 工具也可能如此。
我可以通过指定IdentitiesOnly
SSH 选项使其工作,这似乎回避了代理并强制传递的密钥成为唯一尝试过的密钥,而不是像不存在此选项时那样被视为额外的。在我的测试中,这适用于git clone
和git submodule update
:
GIT_SSH_COMMAND="ssh -o IdentitiesOnly=yes -i ~/.ssh/id_rsa_<somehash>" git clone
或者:
GIT_SSH_COMMAND="ssh -o IdentitiesOnly=yes -i ~/.ssh/id_rsa_<somehash>" git submodule update
推荐阅读
- doctrine - Symfony 4 如何渲染通过@OneToOne 或类似关系引用到另一个实体的属性
- three.js - 使用 Jasmine 在 Karma 中加载文件时出现问题
- android - Android Moshi:发展现状如何
- php - Aws-lambda-php 进程在完成请求之前退出
- android - FFmpeg concat 视频命令错误
- c# - 如何使用接口作为泛型参数?
- python - Python3 - 多处理变量不更新
- php - 卷曲 PHP http_code 返回 0 但浏览器返回 200
- c++ - if 语句和 --variable
- ionic-framework - 在ionic 3中检查我的区域圈内的纬度和经度