首页 > 解决方案 > 如何使用不同的 SSH 密钥在 CircleCI 中克隆第二个 GitHub 存储库(作为主克隆或作为子模块)?

问题描述

我在 CircleCI 中构建了一个 GitHub 项目,它需要克隆另一个存储库,也在 GitHub 中。第二个仓库添加了一个不同的 SSH 密钥作为Deploy Key

我尝试添加没有域的密钥并使用 指定它GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa_<somehash>",但即使这样我也得到了Permission denied (publickey).

标签: gitsshcircleci

解决方案


问题似乎是 CircleCI 使用ssh-agent,至少对于github.com主机。代理可能会对此主机有所不同,因为它是正在构建的主存储库的来源,并且可能有一些集成逻辑来与该特定主机进行身份验证。其他 CI 工具也可能如此。

我可以通过指定IdentitiesOnlySSH 选项使其工作,这似乎回避了代理并强制传递的密钥成为唯一尝试过的密钥,而不是像不存在此选项时那样被视为额外的。在我的测试中,这适用于git clonegit 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

推荐阅读