Debian-Lenny

Git clone/push/pull - 使用者名來自哪裡?

  • July 7, 2010

我已經設置了 gitosis 並且能夠通過 ssh 拉/推。Gitosis 安裝在 Debian Lenny 伺服器上,我正在使用來自 Windows 機器(msysgit)的 g​​it。奇怪的是,如果我loglevel = DEBUG在 gitosis.conf 中啟用,我在使用 gitosis 伺服器執行任何操作時會看到類似這樣的內容:

D:\Kaze\source\test-project>git pull origin master
DEBUG:gitosis.serve.main:Got command "git-upload-pack 'test_project.git'"
DEBUG:gitosis.access.haveAccess:Access check for 'kurokikaze@example.com' as 'writable' on 'test_project.git'...
DEBUG:gitosis.access.haveAccess:Stripping .git suffix from 'test_project.git', new value 'test_project'
DEBUG:gitosis.group.getMembership:found 'kurokikaze@example.com' in 'test'
DEBUG:gitosis.access.haveAccess:Access ok for 'kurokikaze@example.com' as 'writable' on 'test_project'
DEBUG:gitosis.access.haveAccess:Using prefix 'repositories' for 'test_project'
DEBUG:gitosis.serve.main:Serving git-upload-pack 'repositories/test_project.git'

From 192.168.175.128:test_project
* branch            master     -> FETCH_HEAD
Already up-to-date.

問題是:為什麼我是kurokikaze@example.com?此電子郵件也在全域user.email配置變數中。

昨天,當安裝 gitosis 時,它看到我是kaze@KAZE,這是我被添加到 gitosis-admin 組的名稱(並且它有效)。但是今天 git(或 gitosis)開始將我視為kurokikaze@example.com。這適用於我推送或複製的所有儲存庫。我必須將此地址gitosis.conf直接添加到伺服器上才能再次編輯配置(它有效)。keydir:kurokikaze@example.com.pub和中有 2 個公鑰kaze@KAZE.pub,它們的內容相同,最後有kaze@KAZE。原始 URL 看起來像git@lennyserver:test_project.

現在,問題是 - 為什麼 Git(或 gitosis)突然決定通過電子郵件而不是name@machinename給我打電話?我已經更改了一些嘗試設置 Gitosis 的東西(例如,將伺服器上的 git 更新為 1.6.0),但也許我在本地 git 安裝中破壞了一些東西?

從 Gitosis 的角度來看,你的名字只是keydir你用來認證的公鑰的名字。本地機器上的配置無關緊要,除非它影響您使用的公鑰,並且密鑰末尾的字元串無關緊要 - 只是文件名。

您已經為您的公鑰提供了兩個名稱,因此當您使用該密鑰進行身份驗證時,未定義在查找該密鑰的名稱時它會找到其中的哪一個。當你在 Gitosis 中改變一些其他的東西時,大概它碰巧改變了它找到的名稱的任意選擇。

(具體來說,我相信 Gitosis 會生成自己的authorized_keys以包含 中的所有鍵keydir,每行一個,並帶有選項告訴sshd使用者僅以受控方式執行 Gitosis,並告訴 Gitosis 鍵的名稱。如果多行有相同的密鑰,我不確定sshd最終使用哪個——也許是第一個,也許是最後一個,也許是任意的。Gitosis 寫入它們的順序也可能是任意的。但實際上是任意選擇的細節發生的事情是無關緊要的,因為沒有人保證他們不會在下一次更新到sshdor時發生變化gitosis。)

你應該在 Gitosis 配置中選擇你想用來指代你自己的名字,並且keydir只保留那個名字下的密鑰副本。

引用自:https://serverfault.com/questions/152055