2009-05-25 22 views
20

試圖在我的ArchlinuxGitosis需要使用即使公鑰給

http://wiki.archlinux.org/index.php/Setting_Up_Git_ACL_Using_gitosis

我提到這個wiki文章,併成功安裝的gitosis配置Gitosis的,當我面臨着一些問題的密碼。

$ sudo的吃豆子-U的gitosis-的git-20090525-1-i686.pkg.tar.gz
$ sudo的-H -u的gitosis的gitosis-INIT < /tmp/id_rsa.pub

並修改/srv/gitosis/.ssh/authorized_keys以包含我的本地用戶的id_rsa.pub。

但是當我運行git clone爲本地用戶,

$ git的克隆的gitosis @主機:Gitosis的-admin.git

它說

初始化空Git倉庫in /home/wyx/gitosis-admin/.git/
[email protected]的密碼:*****
致命的:「Gitosis的-admin.git」並不似乎是一個git倉庫
致命:遠程端掛機意外

所以git的克隆操作失敗。我想知道爲什麼它會嘗試在我的本地用戶目錄(/ home/wyx)中初始化一個空的git存儲庫?而且由於我已經在.ssh/authorized_keys中添加了本地用戶的id_rsa.pub,爲什麼它仍然要求輸入密碼?

+0

或者只是重新啓動您的控制檯 – Reda 2013-04-11 23:44:19

回答

20

一個空的倉庫被創建,因爲這就是git的工作方式:它必須在它能夠開始將一個遠程對象拖入它之前初始化一個倉庫。不幸的是,這意味着您必須在再次嘗試克隆之前手動刪除空的回購。

至於爲什麼克隆失敗,它看起來像你使用錯誤的語法的遠程存儲庫路徑; git clone不使用scp語法。事實上,如果你沒有指定一個克隆協議,我認爲它假定了git協議而不是ssh,這可能就是它要求你輸入密碼的原因。試試這個:

 
$ git clone ssh://[email protected]/~/gitosis-admin.git 
+0

感謝您的回覆。 最後我發現問題在於我使用錯誤的公共rsa密鑰,而ssh://語法是另一個錯誤。 – ZelluX 2009-05-26 08:54:52

+6

從git 1.6+開始,你不必指定協議。所以user @ host:reponame.git會起作用。 – Shoan 2010-08-08 14:36:01

4

Gitosis創建它自己的authorized_keys文件。如果你已經有了這個文件,刪除它並讓gitosis-init重新創建它。一旦完成,不要混淆文件。

+1

這是我碰到的問題。我已經將我的id_rsa.pub複製到〜gitosis/.ssh/authorized_keys中。把它吹掉讓gitosis-init寫出它想要的(而不是追加到現有的)解決了我的問題。 – uckelman 2011-03-03 15:22:35

8

我也面臨同樣的問題「致命的:'/gitosis-admin.git'似乎不是有效的存儲庫。」 我搜索了很多問題,最終找到了解決方案。

其實,gitosis用戶的默認地址是「/ srv/gitosis」:就像我的安裝程序具有Ubuntu服務器10.04一樣。

當我們編寫「git clone [email protected]:gitosis-admin.git」時,它會在/ srv/gitosis中搜索gitosis-admin.git存儲庫。所以當我進入/ srv/gitosis時,我發現裏面有另一個名爲存儲庫的倉庫,它由gitosis-admin.git倉庫組成。

因此,實際上默認Gitosis的-admin.git不在默認位置。所以我必須修改命令路徑,然後它工作正常。

我把存儲庫克隆到我的本地機器上。我用命令:

「混帳克隆[email protected]:倉庫/ Gitosis的-admin.git」,它爲我工作得很好。

見你的情況的gitosis-admin目錄,我希望你將能夠解決您的問題。

0

我終於得到它這樣

git clone ssh://[email protected]:1337/home/git/repositories/gitosis-admin.git 

工作,其中1337端口SSH使用。

6

這正是解決了這個問題,我(在Ubuntu):

git clone [email protected]:/srv/gitosis/repositories/gitosis-admin.git 
1

編輯authorized_keys的不應該是必要的一般。

我曾經有一個授權問題,Gitosis的服務器不斷問我密碼,即使我已經把我的公共密鑰之前。我意識到gitosis給了我一個警告「警告:gitosis.ssh:當我嘗試提交併將我的更改推送到gitosis時,keyfile中的不安全SSH用戶名:'[email protected]'」。

更改密鑰文件和密鑰文件名稱中的user @ host部分解決了我的問題。不知何故gitosis不喜歡以前的一個。

0

同樣的問題,在我的情況是,我在的.ssh/authorized_keys的錯誤。我一定是搞砸了在某個時候......

0

已經移動到新的Ubuntu機器上並運行到這個問題我自己,我看到這裏一對夫婦的答案是讓我朝着正確的方向,即使用絕對指向每個存儲庫的.git文件的路徑。

試驗了一下,我注意到相對於git的用戶的主目錄路徑也工作了,這縮短了類似:

[email protected]:/var/git/repositories/project.git 

[email protected]:repositories/project.git 

打多一點我試圖移動項目文件從倉庫直接進入git的主目錄;現在只有項目是必需的:

[email protected]:project.git 

這有點哈克,但我懷疑會造成任何傷害。很高興知道發生了什麼變化,因爲我在另一個Ubuntu(舊版本)上託管gitosis,並能夠使用上面的最後一個表示法在存儲庫目錄中包含項目。

1

我解決了類似的問題。這可能不是你的情況,但你可以嘗試重新應用我所做的相同的故障排除。

我意識到,當我在爲新用戶推送密鑰時,我得到了這個堆棧跟蹤,這是gitosis掛鉤無法處理新密鑰的症狀。

remote: Traceback (most recent call last): 
remote: File "/usr/local/bin/gitosis-run-hook", line 9, in <module> 
remote:  load_entry_point('gitosis==0.2', 'console_scripts', 'gitosis-run-hook')() 
remote: File "/usr/local/lib/python2.7/dist-packages/gitosis-0.2-py2.7.egg/gitosis/app.py", line 24, in run 
remote:  return app.main() 
remote: File "/usr/local/lib/python2.7/dist-packages/gitosis-0.2-py2.7.egg/gitosis/app.py", line 38, in main 
remote:  self.handle_args(parser, cfg, options, args) 
remote: File "/usr/local/lib/python2.7/dist-packages/gitosis-0.2-py2.7.egg/gitosis/run_hook.py", line 81, in handle_args 
remote:  post_update(cfg, git_dir) 
remote: File "/usr/local/lib/python2.7/dist-packages/gitosis-0.2-py2.7.egg/gitosis/run_hook.py", line 45, in post_update 
remote:  config=cfg, 
remote: File "/usr/local/lib/python2.7/dist-packages/gitosis-0.2-py2.7.egg/gitosis/gitdaemon.py", line 95, in set_export_ok 
remote:  for (dirpath, repo, name) in walk_repos(config): 
remote: File "/usr/local/lib/python2.7/dist-packages/gitosis-0.2-py2.7.egg/gitosis/gitdaemon.py", line 72, in walk_repos 
remote:  assert ext == '.git' 
remote: AssertionError 

的錯誤是隻顯示ONCE,所以我天真地駁回它作爲一個短暫的失敗。

實際上,Gitosis只能用於我的密鑰,但它不適用於我試圖支持的任何用戶。在~/.ssh/authorized_keys我找不到我剛剛添加的用戶的公鑰。這就是爲什麼我的朋友每次嘗試克隆都被要求輸入密碼。

我添加調試Gitosis的設置,加入這兩行gitosis.conf

[gitosis] 
loglevel=DEBUG 

我必須繼續添加和刪除用戶gitosis.conf的文件,以便在吊鉤將再次觸發。我的調試日誌顯示

remote: DEBUG:gitosis.gitdaemon:Deny 'syncShare' 
remote: DEBUG:gitosis.gitdaemon:Walking 'legacy.d', seeing ['buildtools', 'QA_Dashboard'] 
remote: DEBUG:gitosis.gitdaemon:Walking 'legacy.d/buildtools', seeing ['.git', 'conf', 'scripts'] 
remote: Traceback (most recent call last): 
etc ... 

A-ha!當鉤子通過存儲庫執行「漫遊」時,它發現了.git目錄下的legacy.d/buildtools,這正是assert ext == '.git'發生的地方。

我曾經使用服務器來存儲來自其他存儲庫的簡單克隆。請注意,一個普通的克隆,而不是一個鏡像或裸存儲庫。像每個包含.git目錄的克隆一樣。

Gitosis中的掛鉤不知道如何處理.git目錄。它認爲它是一個空名稱的存儲庫並中止。一旦我消除了克隆,一切恢復正常。

0

爲了更深入地瞭解身份驗證問題,收集詳細的調試日誌的詳細信息:使用

ssh -vvv [email protected]_host

直接手動連招(其中,措辭最重要的/一般,實際使用的最精確的/直接上下文引用;在這種情況下:實際的ssh機制,而不是工具遠 - 因此必要性更低 - git處理!)。

相關問題