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

时间:2016-11-09 20:35:47

标签: git github ssh repository ssh-keys

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

不幸的是,我收到一条错误Key is already in use,根据this github page,这是因为我无法将部署密钥添加到多个仓库中。

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

1 个答案:

答案 0 :(得分:12)

在你链接的GitHub页面上,它的描述并不完全正确。实际上,可以对许多不同的GitHub存储库使用相同的ssh密钥。您可以做的是为许多存储库使用一个ssh密钥作为他们所称的"部署密钥",也不使用相同的 ssh键作为一些其他用户。

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

  • 帐户密钥,用于将传入连接验证为 you 。然后,您可以拥有一些广泛(或狭窄)的存储库区域的权限,这些存储库由每个存储库"具有访问权限的帐户控制。设置。也就是说,密钥本身就是他们知道你是kramer65的方式(或者你的帐户名实际上是什么)。
  • 部署密钥,它将传入连接验证为可以访问一个特定存储库。也就是说,没有"帐户"涉及:它只是一个密钥,附加到一个特定的存储库。

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

  

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

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

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

(没有理论上的理由他们不能允许部署密钥自动创建一个否则匿名的机器用户"然后自动添加到每个存储库,或者删除从它,你想要的。然而,由于机器用户已经存在,并且执行相同的功能,因此购买他们没有任何东西。他们可以尝试将其作为安全功能旋转,因为它可以让你知道& #34;嘿,那把钥匙对我来说已经意味着什么了......但是如果你有那把钥匙并且 假设拥有那把钥匙,你现在可以找出那个钥匙一个密钥实际解锁,如果有任何东西有点反安全。另一方面,如果 应该拥有该密钥,并且只是忘记了它解锁的哪个存储库,那就会使系统崩溃对你来说非常困难。这是任何安全系统的典型特征:你做得越安全,实际使用起来就越不方便。)