为什么我不能在一个以上的github repo上使用一个ssh密钥?

kra*_*r65 14 git ssh github repository ssh-keys

我有一台服务器,需要设置两个git repos的内容,我在github上托管.我现在想要将服务器的ssh密钥作为部署密钥添加到github上的两个项目中.

不幸的是我收到一个错误说Key is already in use,根据这个github页面是因为我无法将一个部署密钥添加到多个repo.

我真的好奇; 为什么这是个问题?为什么一台服务器无法访问多个repo?他们在这里尝试缓解的风险是什么?

tor*_*rek 13

这并不是对你所链接的GitHub页面所说内容的正确描述.实际上,您可以对许多不同的GitHub存储库使用相同的ssh密钥.您不能做的是为许多存储库使用一个ssh密钥,并将其称为"部署密钥",也不要使用其他用户相同的 ssh密钥.

这里发生的是GitHub的ssh服务器将传入密钥分为以下两种类型之一:

  • 一个账号密码,这验证传入连接,.然后,您可以在某些广泛(或狭窄)的存储库中拥有权限,这由每个存储库的"具有访问权限的帐户"设置控制.也就是说,密钥本身就是他们知道你kramer65的身份(或者你的帐户名称实际上是什么).
  • 部署键,其验证传入的连接为具有访问一个特定的存储库.也就是说,没有涉及"帐户":它只是一个密钥,附加到一个特定的存储库.

还有"机器用户",但这些是一种帐户形式; 我不确定GitHub是否会将内部区别于常规帐户密钥区分开来.因为它们类似帐户而不是类似部署密钥,所以您可以授予它们访问许多不同存储库的权限.(这可能是你想要的.)

我真的好奇; 为什么这是个问题?为什么一台服务器无法访问多个repo?他们在这里尝试缓解的风险是什么?

他们并没有真正保护这里的一切.他们只是让你在GitHub上保存这一个额外的密钥,为了(方便),不用费心去创建帐户.为了(他们)的方便,他们然后将这一个额外的密钥附加到一个存储库,这使得他们的ssh服务器 - 或者真的,在密钥验证之后它背后的内容,即"登录shell" - 查找一个允许的存储库无需先通过"帐户"表间接.当传入密钥是帐户(或机器用户)密钥时,他们的ssh服务器或其后面的内容必须查看此辅助表,以查找允许的存储库集.

有关详细信息,请参阅https://developer.github.com/guides/managing-deploy-keys/#deploy-keys.

(没有理论上的理由他们不能允许部署密钥自动创建一个匿名的"机器用户",然后根据需要自动添加到每个存储库或从中删除.但是,他们什么都不买,因为机器用户已经存在,并且执行相同的功能.他们可以尝试将其作为安全功能旋转,因为它让你知道"嘿,那把钥匙对我来说意味着什么"......但是如果你有那把钥匙而且不是'牛逼应该有那把钥匙,你现在可以找出一个关键的实际解锁,其中如果有什么是有点反的安全性.另外,如果你应该有一个键,干脆忘了您的存储库解锁,这使得系统非常困难.这是任何安全系统的典型特征:您制作它越安全,实际使用就越不方便.)

  • 当使用自动化系统和 git 子模块时,这个工作流程会成为一个问题。您不能在多个存储库中使用相同的部署密钥,因此解决方法是将该密钥添加到其用户帐户(或专用计算机帐户)中。大多数用户会采取阻力最小的方式将其添加到自己的帐户中,从而导致更大的安全风险。GitHub 应该让用户在每个存储库的基础上选择并承担风险...... (3认同)
  • 让我提供答案的答案:这是由于某些技术限制,普通用户不应该在意。 (2认同)