带git子模块的多个ssh密钥

时间:2017-01-31 10:52:11

标签: git github ssh ssh-keys

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

由于这个构建服务器不是" me" (它不能拥有我的用户凭据),它需要能够通过github从GIT下载项目"部署密钥"特征。 (每个项目只读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"命令。

当它进入init并更新子模块时,它使用父repo中的任何主机名(原始mygithubserver.com)。当我们的开发人员使用他们的个人密钥时,这完美无瑕。但是,对于需要针对不同项目使用不同部署密钥的构建服务器,这会失败。

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

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

1 个答案:

答案 0 :(得分:4)

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

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"