2012-11-05 170 views
60

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

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

而且要清楚,我是而不是正在寻找解决方法(创建一个虚拟用户,使用多个键......),但仅限于部署密钥的此限制的合理解释。

相关主题:

+0

由于没有更好的方法,我们创建了一个专门的部署用户,我们正在授予对存储库的只读访问权限。最终结果是一样的。 – Datageek

+0

在这里很好的回答:http://stackoverflow.com/questions/11656134/github-deploy-keys-how-do-i-authorize-more-than-one-repository-for-a-single-mac – apple16

回答

17

的唯一原因,你所引用的解决方法所示(建立一个单一的“打造”用户或共享相同的id_rsa.REPONAME.pub)是:

避免共享公共/私有密钥对不同的用户

即使那会不会是你的情况的情况下(构建多个项目),允许重复使用相同的SSH密钥将打开的可能性两个不同用户共享相同的ssh密钥,这将打败身份验证的用途。

认证是指:
“使用特定的SSH密钥应该意味着谁正在使用它,你都应该知道”。


GitHub的页面 “Managing deploy keys” 使用ssh详细介绍了各个账户:

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

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

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

这一次,ssh密钥没有附加到一个用户(您可以授予访问多个回购),而是一个回购。
授予几个的ssh访问权将等同于“机器用户”。

认证期限:

  • 使用相同的密钥数回购是好的,当它是由用户来完成的(它说密钥关联以他/她的账户)使用
  • 对于几个回购的同一个钥匙是不好的,当钥匙附加回购,因为你根本不知道谁访问了什么
    与“机器用户”不同的是,“用户”被声明为许多回购的协作者。
    这里(部署密钥),没有“协作者”,只是一个直接的ssh访问授予回购。
+33

GitHub支持*帐户级别*公钥和*项目级别*键(又名部署密钥)。不允许重复使用* Account Level *键是有道理的,但我声称不允许它用于* Deploy Keys *。我的一个帐户级密钥允许访问我的所有项目,为什么我不能有一个部署密钥,允许访问我的一些项目?这只是更严格的,不会造成任何我可以看到的担忧。您对打开两个不同用户共享相同ssh密钥*的可能性的担忧并未出现在该场景中。 –

+0

@DavidEbbo它可能没有出现在图片中,但是担心(两个不同的用户共享相同的ssh密钥)是ssh密钥不共享的核心原因。 – VonC

+12

恐怕我不遵循你的推理。我正在询问一个非常具体的场景(在多个项目中使用Deploy Key),并且您的论点不可能引发一个不相关的场景(两个用户共享ssh密钥)。坚持Deploy Key方案,github允许它的负面影响是什么? –

1

我花了很多思考来理清含义并提出了这种情况。

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

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

分配和管理如此多的唯一密钥确实令人沮丧,但GitHub制定他们的策略时安全性的影响是很明显的:当您撤销密钥时,您将保证撤销该密钥授予的所有访问权限,因为它是只在一个地方使用。

+0

我不相信这个解释。与允许一个用户访问多个存储库有什么不同,这显然是允许的?如果您不再信任该用户,则需要将其从每个回购中移除。 –

+0

@David:'这与从一个用户访问多个存储库的方式有明显区别,这显然是允许的'您能否进一步解释这一点?我只有一个开发人员帐户,我发现您可以添加ssh密钥进行帐户范围的访问(所有存储库的一个密钥)或添加单个部署密钥(每个存储库一个密钥)。这仍然是一对多或一对一的关系,在这两种情况下,撤销“一键”撤销“全部”访问。 – Zhro

+0

为了进一步说明,我们没有机会(我能告诉什么)意外地以多对一的关系来分配密钥,其中在被撤销后其他地方可能存在访问。这似乎是GitHub对此限制的动机,但我只是在猜测。 – Zhro

相关问题