对多个github项目使用相同的部署密钥

Github不允许将同一ssh部署密钥用于多个项目,这在某些情况下非常有用(例如CI服务器使用专用子模块处理项目)。 我已经看到各种线索,似乎是说这种限制是出于“安全原因”,但我还没有看到一个令人信服的解释,究竟会有什么风险。

请注意,Github不允许重复使用帐户级别密钥是有道理的(两个用户不应该共享密钥)。 这只是我质疑部署密钥的限制。

而要清楚的是,我没有寻找解决方法(创build一个虚拟用户,使用多个键,…),但只是为了部署密钥的这种限制似是而非的解释。

相关线程:

  • 一个显示解决方法
  • 一个讨论这个问题,但没有真正去任何地方

您引用的解决方法(创build单个“构build”用户,或每个回购共享相同的id_rsa.REPONAME.pub )所示的唯一原因是:

避免为不同的用户分享公共/私人密钥

即使在你的情况下(构build多个项目)情况并非如此,允许重复使用相同的ssh密钥可能会使两个不同的用户共享相同的ssh密钥,从而破坏身份validation的目的。

authentication意味着:
“使用某个ssh密钥应该意味着你应该知道谁在使用它”。


GitHub页面“ pipe理部署密钥 ”使用ssh详细介绍了各种帐户:

  • SSH代理转发 :代理转发使用您在本地开发计算机上已经设置的SSH密钥,当您连接到服务器并运行git命令时。
    您可以select让远程服务器访问您的本地ssh-agent,就好像它在服务器上运行一样。
    所以不需要在服务器上复制私钥。

  • 机器用户 :(这是“虚拟帐户”策略)将密钥附加到用户帐户。 由于这个帐户不会被人使用,所以称为机器用户。
    你可以像对待一个人一样对待这个用户,把这个密钥附加到机器用户帐户,就好像它是一个普通的帐户一样。
    授予帐户协作者或团队对其需要访问的回购的访问权限。
    所以一个私钥与一个“机器用户”关联,每个服务器一个。

  • 部署密钥 (每个GitHub仓库一个)存储在服务器上的SSH密钥,并授予对GitHub上单个仓库的访问权限。
    此密钥直接附加到回购站而不是用户帐户
    而不是去你的帐户设置,去目标回购的pipe理页面。
    转到“ Deploy Keys ”,然后单击“ Add deploy key ”。 粘贴公钥并提交。

这一次,SSH密钥没有附加到一个用户(你可以授予访问几个回购),而是一个回购。
授予多个回购SSH访问将相当于“机器用户”。

authentication方面

  • 使用相同的密钥进行多次回购可以在用户完成时(具有与他/她的账户相关联的所述密钥)
  • 使用相同的密钥进行多个回购是不行的,当钥匙附有回购,因为你根本不知道访问了什么。
    与“机器用户”不同的是,“用户”被声明为许多回购的协作者。
    在这里(部署密钥), 没有“合作者” ,只是一个直接的ssh访问授予回购。

我花了很多的思考来理清这些影响,并提出了这种情况。

想象一下,您为您分配给多个存储库的用户创build了一个部署密钥。 现在,您要撤消该密钥,但在多个地方使用。 因此,不能撤销所有的访问权限,您可能无意中只撤销部分访问权限。

这可能听起来像是一种好处,但是一旦考虑到人为因素,这种多对一的关系本质上是不安全的。 这是因为如果在没有检查每个存储库的情况下真正取消了所有访问权限,并且在忘记了实际分配的位置的情况下单独比较每个公钥,则无法确定。

分配和pipe理这么多独特的密钥确实令人沮丧,但是GitHub制定他们的策略的安全含义是很明确的: 当你撤销一个密钥时,你肯定会撤销该密钥授予的所有访问权限,因为它只被用在一个地方。