自己公司搭建的git伺服器,是不是每個開發者都要把自己的SSH key放到伺服器上?
淡淡烟草味
淡淡烟草味 2017-05-02 09:51:28
0
8
1045
  1. 如題,公司自家搭了git伺服器,是不是要把公司每個開發者的ssh key加進來?

  2. 如果在git伺服器上新建個倉庫,其他人想向上提交程式碼,需要他們把自己的ssh key加進來麼?

  3. 為什麼以前在github上向別人的倉庫貢獻代碼時不用在別人的github上加自己的ssh key,團隊其他小伙伴向我倉庫貢獻代碼也沒加過他們ssh key

淡淡烟草味
淡淡烟草味

全部回覆(8)
左手右手慢动作

清水寺?
報出河畔ID來。

1. 如题,公司自家搭了git服务器,是不是要把公司每个开发者的ssh key加进来?
2. 如果在git服务器上新建个仓库,其他人想向上提交代码,需要他们把自己的ssh key加进来么?
3. 为什么以前在github上向别人的仓库贡献代码时不用在别人的github上加自己的ssh key,团队其他小伙伴向我仓库贡献代码也没加过他们ssh key

服務端儲存SSH公鑰,只不過是為了做免密碼登陸,push等系列操作,或者說,用來認證,(每次連接的時候都需要你提供私鑰進行認證,雖然這個過程你看不到)。

如果服務端不儲存公鑰,當然也可以認證。那麼要回答你的問題就簡單了:

  1. 不是。 Git有兩種傳輸協議,SSH,http。使用SSH傳輸,需要把公鑰加到服務端,做免密碼登陸(push作業等)。使用http(https)傳輸,透過修改netrc,可以做到免密碼登陸(push等操作)。

  2. 不是。同1.

  3. 很正常,原因同1.

評論區有人質疑透過http協議操作git倉庫是我自己瞎想出來的,貼幾張圖:

這是gogs

gitlab

oschina

github

kernel.org

git源碼對http的支援

當然你的問題很有可能是另一個問題:

公司自家搭了git服务器,如果要每个人都能使用,是不是要把公司每个开发者的ssh key加进来?如果不需要,那么怎么搞才能让每个人都有权限登陆gitlab?

答:

  1. 不需要

  2. ldap統一認證。

在統一登陸(認證)的元件中,ldap是使用的最多的認證服務端。各種*nix的系統一登錄,包括libpam、nslcd(登陸linux系統)、sudo權限、gitlab(gogs)、wiki、專案管理、teambition、各種門禁等都會涉及到,甚至可以說,凡是你能蒐集到的(開源的)適用範圍為集團內部的應用,基本上都要支援ldap統一登入。

統一登錄,基本大點的網站都會涉及到,例如github.com需要認證才能登陸gist.github.com。細節被github隱藏,因此你從外面看不到。

但是有一種你肯定接觸過:OAuth認證。例如下圖:QQ登陸酷狗音樂。

市面上的統一認證絕大多數遵循OAuth協議,也有很多是內部自己的實現,例如淘寶.com和aliyun.com的帳號密碼互通。

至於內部系統的統一認證,則是另一套協定:ldap。

市面上幾乎所有的內部系統,都有一套自己的權限系統,包括:註冊,登陸,找回密碼,但是同時,他們幾乎都提支持另外一套權限系統:LDAP。

設想一下,新用戶到公司,需要先到gitlab註冊一個帳號,然後上傳密鑰,登陸伺服器時需要管理員幫忙創建新帳號,登陸第二台伺服器,需要管理員幫忙創建新帳號,登陸各種內網系統,需要管理員幫忙建立新帳號…

所以,下面這些項目需要LDAP:

gitlab

jenkins

使用ldap統一管理可以ssh到主機上的使用者(設定教學):

gogs的ldap認證:

其他不找了,可以這麼說,凡是可以在企業內部部署的應用,包括teambition等閉源應用,基本上都支援ldap認證。

(以上對SSO和統一認證的描述有誤,經依雲提醒,已經修改。)

世界只因有你
  1. 是啊。不然你怎麼做鑑權?當然你可以用 HTTPS,或是自己造輪子。如果你不打算把事情搞複雜的話,走最常規的 ssh + key 登陸,是沒有別的辦法的。

  2. 鑑權是針對使用者的,不是針對倉庫的。授權才需要針對倉庫(或你可以精確到分支)

  3. 因為 github 已經知道你是誰了啊(鑑權完成了)。接下來只要那個倉庫的管理員向你授權推送權限就可以了。不過在 github 上合作很多是透過 pull request 的方式,管理員逐一接受的。倉庫預設任何人都有權提交 pull request 的。

結論你需要 gitlab,或 gitolite。前者是 Ruby 寫的,帶有 Web 介面(像 GitHub),後者是 Perl 寫的,只是倉庫管理本身(只管理 git 倉庫,沒有介面)。

鑑權,又叫身分驗證,是辨識使用者是誰的過程。授權,是判斷這個使用者是否有權力做某件事的過程。它們不是一體的。

滿天的星座
  1. 需要每個帳號把自己的ssh key加進來

  2. 已經把ssh key加到自己帳戶裡面的帳號,向git伺服器提交程式碼不需要再加進來,但需要有該專案的git權限。

  3. 你在github上貢獻程式碼時,已經把自己的帳號的ssh key加進去了吧,要不要也不能push程式碼。

綜上,ssh + git 的遠端程式碼提交方式是基於ssh協定完成的,每個擁有本地gitlab伺服器帳號的人都需要將個人電腦的ssh key加到gitlab上的帳號裡面,這樣才能驗證該人clone和push 的帳號。另外,gitlab上的一個項目,是需要設定權限的,private項目,具有以下角色:Guest, Reporter, Developer, Master。
最後,如果你想在同一台電腦裡面同時配置 github 和 gitlab 的 ssh key,可以參考 一台電腦存放多個git帳戶的多個rsa秘鑰

phpcn_u1582

我們公司就是這樣的,將本地的ssh key 上傳到伺服器就可以推送git 了

巴扎黑

如果你是直接只安裝了git,或是還安裝了gitweb,這都不能很好的實作權限控制。
你可以在伺服器安裝gogs,透過它來進行權限控制。
不建議使用ssh key,因為權限應該是對人的,而不是對機器的。

曾经蜡笔没有小新

為了實現鑑權。

PHPzhong

一般的git伺服器都有自己專案管理人員權限 和key沒有關係 key只是解除認證

给我你的怀抱

如題,公司自家搭了git伺服器,是不是要把公司每個開發者的ssh key加進來?
如果在git伺服器上新建個倉庫,其他人想向上提交程式碼,需要他們把自己的ssh key加進來麼?

為什麼以前在github上向別人的倉庫貢獻代碼時不用在別人的github上加自己的ssh key,團隊其他小伙伴向我倉庫貢獻代碼也沒加過他們ssh key

看你伺服器用的什麼軟體,github向別人程式碼倉庫貢獻程式碼也是fork再提pull request,認證是github做了。
你給github提程式碼的時候就已經給個ssh key了。

第二個問題就depends 了

如果人特別多,不想把他們的ssh key(公鑰)都加進來,伺服器可以給一個群組加一個,然後群組內的開發者通用共同的私鑰。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板