2012-05-08 73 views
2

由於某種原因,我的gitolite沒有附帶示例配置文件,我似乎無法找到任何地方,我確信如果有人可以找到我的副本, 請!!請幫我理解gitolite用戶

不管怎麼說,在gitolite配置文件的格式很簡單,這裏是從我

gitolite conf 
# please see doc/gitolite.conf.mkd for details on syntax and features 

@nmscDevs = [email protected] [email protected] [email protected] 
@buildMgr = [email protected] [email protected] 

repo gitolite-admin 
    RW+  = gitadmin [email protected] 

repo grindstone 
    RW+ = gitadmin 
    RW+ prod$ = @buildMgr 
    - prod$ = @nmscDevs 
    RW = @nmscDevs 

我在keydir文件夾幾個公鑰剪斷:

keydir/ 
gitadmin.pub 
[email protected] 

我的問題是gitolite似乎忽略了設置給個人用戶的權限。除非我給gitadmin用戶完全控制權,否則沒有什麼可以在存儲庫上工作(讀取,寫入等)。然後,似乎每個人都使用gitadmin用戶的權限。我克隆回購這樣

git clone [email protected]:grindstone.git 

但是當我嘗試的東西克隆這樣

git clone '[email protected]'@server:grindstone.git 

進出口提示輸入密碼。每個用戶都需要在服務器上擁有一個帳戶,以便他們可以進入SSH?

權限在gitolite中的工作原理是什麼?我導致瞭解,git用戶需要一個帳戶ssh進入服務器,然後一旦gitolite接管它,使用與git請求一起傳遞的電子郵件來確定權限,我在這裏錯了嗎?我錯過了什麼?

順便說一句,這是我的.ssh/config中

host server 
    user git 
    hostname server 
    identityfile ~/.ssh/gitadmin 

host server 
    user [email protected] 
    hostname server 
    identityfile ~/.ssh/id_rsa 

更新: 我已經升級到gitolite的最新版本,當我嘗試做一個克隆我得到這個

$ git clone [email protected]:testing.git 
Cloning into 'testing'... 
FATAL: R any testing gitadmin DENIED by fallthru 
(or you mis-spelled the reponame) 
fatal: The remote end hung up unexpectedly 

我配置文件現在看起來像這樣:

repo testing 
    RW+ = william_slepecki 

和我的.ssh配置不變。另外,我有這個在我的日誌

2012-05-08.13:01:13  19027 ssh  ARGV=gitadmin SOC=git-upload-pack 'testing.git'  FROM=10.99.5.146 
2012-05-08.13:01:13  19027   access(testing, gitadmin, R, 'any'),-> R any testing gitadmin DENIED by fallthru 
2012-05-08.13:01:13  19027   trigger,Writable,access_1,ACCESS_1,testing,gitadmin,R,any,R any testing gitadmin DENIED by fallthru 

,這裏是我的全球混帳配置的頂剪斷

[user] 
    name = Willie Slepecki 
    email = [email protected] 

爲什麼在世界這仍然堅持認爲gitadmin是回購,爲什麼它不使用william_slepecki嗎?這到底是什麼名字使用?

+2

你有沒有讀過廣泛的[gitolite文檔](http://sitaramc.github.com/gitolite/master-toc.html)?除了[堆棧溢出不是一個「通吃」](http://meta.stackexchange.com/a/128577/183347) – KurzedMetal

+0

我有,但它不能解釋爲什麼沒有工作,除非我給gitadmin完全控制回購 – scphantm

+0

請在用戶名中避免任何「@」。或嘗試編碼它(%40)。但我寧願完全避免它。你還用什麼gitolite版本? – VonC

回答

2

我就點你的2個主要錯誤:

1錯誤:Gitolite只使用用戶部分(一個之前的「@」)在keydir找到了鑰匙。
例如:gitolite只能識別一個用戶,william_slepecki,對於密鑰[email protected][email protected],這裏唯一的一點是這個用戶可以使用2個不同的密鑰進行身份驗證,您不能授予密鑰權限,只能給用戶授權。

第二個錯誤: 你gitolite服務僅由一個正常的系統用戶,很可能git提供,這樣連接應[email protected]:repo.git進行,gitolite用戶不需要或有一個系統帳戶,只需一個SSH密鑰,所以連接到[email protected]:repo.git將永遠不會工作

+0

好了,我升級到最新版本,仍然得到相同的錯誤,我已經在上面發佈了更多細節。 – scphantm

+0

@scphantm你的'.ssh/config'根本沒有意義。您正在定義兩次相同的「主機」。 – KurzedMetal

2

那麼,我的問題是幾倍。

首先,我誤解了gitadmin鍵的作用。我認爲,因爲這是唯一一個在服務器上擁有實際帳戶的用戶,它需要在所有開發人員工作站上運行。事實證明這是錯誤的。 gitolite接受keydir目錄中的密鑰,並在推送時將它們添加到git/.ssh/authenticated_keys文件中。這允許keydir中的所有鍵作爲用戶在機器上的git登錄。由於git用戶沒有與之相關的控制檯,因此沒有安全漏洞。

二,我的〜/ .ssh/conf文件。因爲我不明白#1是如何工作的,所以我認爲git以某種方式將用戶名作爲git命令的一部分傳遞給了電子郵件地址。一旦我找出#1,我能夠清理配置文件來映射git @ server用戶,並使用我的常規來處理其他任何事情。

一旦這兩個問題被理解和解決,所有權限開始正確工作。我現在已經替換了服務器上的gitadmin用戶密鑰,以使開發者工作站上的用戶密鑰無效並更新了我的所有開發人員配置。管理層再次高興。

謝謝大家。

+0

好的意見,謝謝。 +1 – VonC

+0

我有類似的問題。我以前使用錯誤的密鑰運行安裝。儘管對新密鑰使用gitolite setup -pk(並且能夠從信息中獲得響應),但我被拒絕訪問管理員回購站。我整理了gitolite的安裝文件,並用正確的密鑰重新編寫了程序,一切正常。 – Errol