2012-11-05 100 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

相關問題