Git clone/push/pull - 使用者名來自哪裡?
我已經設置了 gitosis 並且能夠通過 ssh 拉/推。Gitosis 安裝在 Debian Lenny 伺服器上,我正在使用來自 Windows 機器(msysgit)的 git。奇怪的是,如果我
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 寫入它們的順序也可能是任意的。但實際上是任意選擇的細節發生的事情是無關緊要的,因為沒有人保證他們不會在下一次更新到sshd
or時發生變化gitosis
。)你應該在 Gitosis 配置中選擇你想用來指代你自己的名字,並且
keydir
只保留那個名字下的密鑰副本。