esh*_*lev 6 git ssh github ssh-keys
我正在使用GITHUB的企业版.我正在创建一个自动构建服务器来构建我们的项目.这些项目有子模块.
由于这个构建服务器不是"我"(它不能拥有我的用户凭据),它需要能够通过github"部署密钥"功能从GIT下载项目.(每个项目只读ssh键)
限制是: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服务器)
我通过在包含以下内容的父项目中创建一个小脚本文件来解决它:
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"
Run Code Online (Sandbox Code Playgroud)