【问题标题】:Multiple ssh keys with git submodules带有 git 子模块的多个 ssh 密钥
【发布时间】:2017-02-10 15:22:04
【问题描述】:

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

由于这个构建服务器不是“我”(它不能拥有我的用户凭据),它需要能够通过 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 服务器)

【问题讨论】:

    标签: git github ssh ssh-keys


    【解决方案1】:

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

    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"
    

    【讨论】:

    • 遇到了完全相同的问题,在 .gitmodules 中我留下了原始的 git 远程 url。我改为更改子模块内的远程 url。
    • 非常方便。对于任何想知道上述内容的人(我做了):ssh-agent 持有您的密钥,例如 git 使用的密钥。 “如果给出命令行,这将作为代理的子进程执行。当命令死亡时,代理也会死亡”。第 2 行和第 3 行使用 sh -c "<commands>" 运行代理的新实例,这将在代理中运行新的 shell,然后在该 shell 中执行这些命令。 ssh-add -D 删除 此实例上的所有当前身份ssh-add <key> 仅添加该密钥文件中的一个身份。 git submodule update <module> 使用该身份进行更新。
    猜你喜欢
    • 2020-04-09
    • 2012-05-14
    • 1970-01-01
    • 2017-07-02
    • 1970-01-01
    • 2015-09-11
    • 2016-04-21
    • 2011-12-31
    • 1970-01-01
    相关资源
    最近更新 更多