具有 git 个子模块的多个 ssh 密钥

Multiple ssh keys with git submodules

我正在使用 GITHUB 的企业版。 我正在创建一个自动构建服务器来构建我们的项目。 这些项目有子模块。

由于此构建服务器不是 "me"(它不能拥有我的用户凭据),它需要能够通过 git 集线器从 GIT 下载项目 "deploy keys" 特征。 (每个项目只读 ssh-keys)

限制是: 1. github 希望我以 ssh://git@mygithubserver.com 登录 2. github 强制执行任何两个项目都不能共享部署密钥的策略(不同于为整个 github 服务器注册的常规用户密钥)。 [附带问题,这背后的原因是什么?!] 3.我的公司IT不允许共享任意账户:一个用户总是与一个人相关联,它不能属于一个服务器。

因此,我认为我唯一的选择是为不同的项目使用具有不同密钥的部署密钥功能。 (部署密钥基本上是在考虑这种情况的情况下开发的...)

我发现可以设置多个密​​钥的唯一方法是:https://gist.github.com/jexchan/2351996

现在关于子模块:这个技巧只适用于顶级项目,因为这是我唯一可以指定自定义主机名的地方,如:"git clone git@custom-git-host-name" 命令。

当它进入初始化并更新 子模块 时,它使用父存储库中的任何主机名(即原始 mygithubserver.com )。当我们的开发人员使用他们的个人密钥时,这可以完美地工作。但是,对于不同项目需要不同部署密钥的构建服务器,这会失败。

有没有办法解决这个问题,让 git 对同一服务器上的不同项目使用不同的 ssh 密钥?

是否有一些愚蠢的方法可以让 2 个项目共享部署密钥? (不允许我修改 github 源代码,因为这是一个非常庞大的 IT 管理企业 githib 服务器)

我通过在包含以下内容的父项目中创建一个小脚本文件解决了这个问题:

git submodule init
ssh-agent sh -c "ssh-add -D; ssh-add some_private_key.pem; git submodule update some_dubmodule"
ssh-agent sh -c "ssh-add -D; ssh-add another_private_key.pem; git submodule update another_submodule"