如題,公司自家搭了git伺服器,是不是要把公司每個開發者的ssh key加進來?
如果在git伺服器上新建個倉庫,其他人想向上提交程式碼,需要他們把自己的ssh key加進來麼?
為什麼以前在github上向別人的倉庫貢獻代碼時不用在別人的github上加自己的ssh key,團隊其他小伙伴向我倉庫貢獻代碼也沒加過他們ssh key
清水寺? 報出河畔ID來。
1. 如题,公司自家搭了git服务器,是不是要把公司每个开发者的ssh key加进来? 2. 如果在git服务器上新建个仓库,其他人想向上提交代码,需要他们把自己的ssh key加进来么? 3. 为什么以前在github上向别人的仓库贡献代码时不用在别人的github上加自己的ssh key,团队其他小伙伴向我仓库贡献代码也没加过他们ssh key
服務端儲存SSH公鑰,只不過是為了做免密碼登陸,push等系列操作,或者說,用來認證,(每次連接的時候都需要你提供私鑰進行認證,雖然這個過程你看不到)。
如果服務端不儲存公鑰,當然也可以認證。那麼要回答你的問題就簡單了:
不是。 Git有兩種傳輸協議,SSH,http。使用SSH傳輸,需要把公鑰加到服務端,做免密碼登陸(push作業等)。使用http(https)傳輸,透過修改netrc,可以做到免密碼登陸(push等操作)。
不是。同1.
很正常,原因同1.
評論區有人質疑透過http協議操作git倉庫是我自己瞎想出來的,貼幾張圖:
這是gogs
gitlab
oschina
github
kernel.org
git源碼對http的支援
當然你的問題很有可能是另一個問題:
公司自家搭了git服务器,如果要每个人都能使用,是不是要把公司每个开发者的ssh key加进来?如果不需要,那么怎么搞才能让每个人都有权限登陆gitlab?
答:
不需要
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:
jenkins
使用ldap統一管理可以ssh到主機上的使用者(設定教學):
gogs的ldap認證:
其他不找了,可以這麼說,凡是可以在企業內部部署的應用,包括teambition等閉源應用,基本上都支援ldap認證。
(以上對SSO和統一認證的描述有誤,經依雲提醒,已經修改。)
是啊。不然你怎麼做鑑權?當然你可以用 HTTPS,或是自己造輪子。如果你不打算把事情搞複雜的話,走最常規的 ssh + key 登陸,是沒有別的辦法的。
鑑權是針對使用者的,不是針對倉庫的。授權才需要針對倉庫(或你可以精確到分支)
因為 github 已經知道你是誰了啊(鑑權完成了)。接下來只要那個倉庫的管理員向你授權推送權限就可以了。不過在 github 上合作很多是透過 pull request 的方式,管理員逐一接受的。倉庫預設任何人都有權提交 pull request 的。
結論你需要 gitlab,或 gitolite。前者是 Ruby 寫的,帶有 Web 介面(像 GitHub),後者是 Perl 寫的,只是倉庫管理本身(只管理 git 倉庫,沒有介面)。
鑑權,又叫身分驗證,是辨識使用者是誰的過程。授權,是判斷這個使用者是否有權力做某件事的過程。它們不是一體的。
需要每個帳號把自己的ssh key加進來
已經把ssh key加到自己帳戶裡面的帳號,向git伺服器提交程式碼不需要再加進來,但需要有該專案的git權限。
你在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秘鑰
我們公司就是這樣的,將本地的ssh key 上傳到伺服器就可以推送git 了
如果你是直接只安裝了git,或是還安裝了gitweb,這都不能很好的實作權限控制。 你可以在伺服器安裝gogs,透過它來進行權限控制。 不建議使用ssh key,因為權限應該是對人的,而不是對機器的。
為了實現鑑權。
一般的git伺服器都有自己專案管理人員權限 和key沒有關係 key只是解除認證
如題,公司自家搭了git伺服器,是不是要把公司每個開發者的ssh key加進來? 如果在git伺服器上新建個倉庫,其他人想向上提交程式碼,需要他們把自己的ssh key加進來麼?
看你伺服器用的什麼軟體,github向別人程式碼倉庫貢獻程式碼也是fork再提pull request,認證是github做了。 你給github提程式碼的時候就已經給個ssh key了。
第二個問題就depends 了
如果人特別多,不想把他們的ssh key(公鑰)都加進來,伺服器可以給一個群組加一個,然後群組內的開發者通用共同的私鑰。
清水寺?
報出河畔ID來。
服務端儲存SSH公鑰,只不過是為了做免密碼登陸,push等系列操作,或者說,用來認證,(每次連接的時候都需要你提供私鑰進行認證,雖然這個過程你看不到)。
如果服務端不儲存公鑰,當然也可以認證。那麼要回答你的問題就簡單了:
不是。 Git有兩種傳輸協議,SSH,http。使用SSH傳輸,需要把公鑰加到服務端,做免密碼登陸(push作業等)。使用http(https)傳輸,透過修改netrc,可以做到免密碼登陸(push等操作)。
不是。同1.
很正常,原因同1.
評論區有人質疑透過http協議操作git倉庫是我自己瞎想出來的,貼幾張圖:
這是gogs
gitlab
oschina
github
kernel.org
git源碼對http的支援
當然你的問題很有可能是另一個問題:
答:
不需要
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和統一認證的描述有誤,經依雲提醒,已經修改。)
是啊。不然你怎麼做鑑權?當然你可以用 HTTPS,或是自己造輪子。如果你不打算把事情搞複雜的話,走最常規的 ssh + key 登陸,是沒有別的辦法的。
鑑權是針對使用者的,不是針對倉庫的。授權才需要針對倉庫(或你可以精確到分支)
因為 github 已經知道你是誰了啊(鑑權完成了)。接下來只要那個倉庫的管理員向你授權推送權限就可以了。不過在 github 上合作很多是透過 pull request 的方式,管理員逐一接受的。倉庫預設任何人都有權提交 pull request 的。
結論你需要 gitlab,或 gitolite。前者是 Ruby 寫的,帶有 Web 介面(像 GitHub),後者是 Perl 寫的,只是倉庫管理本身(只管理 git 倉庫,沒有介面)。
鑑權,又叫身分驗證,是辨識使用者是誰的過程。授權,是判斷這個使用者是否有權力做某件事的過程。它們不是一體的。
需要每個帳號把自己的ssh key加進來
已經把ssh key加到自己帳戶裡面的帳號,向git伺服器提交程式碼不需要再加進來,但需要有該專案的git權限。
你在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秘鑰
我們公司就是這樣的,將本地的ssh key 上傳到伺服器就可以推送git 了
如果你是直接只安裝了git,或是還安裝了gitweb,這都不能很好的實作權限控制。
你可以在伺服器安裝gogs,透過它來進行權限控制。
不建議使用ssh key,因為權限應該是對人的,而不是對機器的。
為了實現鑑權。
一般的git伺服器都有自己專案管理人員權限 和key沒有關係 key只是解除認證
為什麼以前在github上向別人的倉庫貢獻代碼時不用在別人的github上加自己的ssh key,團隊其他小伙伴向我倉庫貢獻代碼也沒加過他們ssh key
看你伺服器用的什麼軟體,github向別人程式碼倉庫貢獻程式碼也是fork再提pull request,認證是github做了。
你給github提程式碼的時候就已經給個ssh key了。
第二個問題就depends 了
如果人特別多,不想把他們的ssh key(公鑰)都加進來,伺服器可以給一個群組加一個,然後群組內的開發者通用共同的私鑰。