簡體   English   中英

git 推/拉 ssh 到本地托管 gitlab 作為 root 需要 git@gitlab 密碼

[英]git push/pull over ssh to locally hosted gitlab as root requires git@gitlab password

我開始在這個問題上解決這個問題。 我將它分開是因為我意識到這是一個不涉及 gitpython 的不同問題,而是單獨涉及 git。

我有一個 python 腳本,該腳本涉及推和拉到必須以 root 身份運行的本地 gitlab 實例。 .git/config 看起來像這樣:

[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
[remote "origin"]
        url = git@gitlab.our.instance.name:my-name/repo-name.git
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
        remote = origin
        merge = refs/heads/master

我發現,每當我從 gitlab 以 root 身份運行git pullgit clone時,它都需要 git@gitlab.our.instance.name 主機密碼,就好像它是正如您在遠程 url 中看到的,所有遠程操作都是通過 ssh 協議完成的,而不是 https。

這是 gitlab 的配置問題嗎? 關於 git 或 ssh 我不知道的東西? 我必須以 sudo 身份運行此腳本,所以現在我正在研究一種不以 root 身份運行git pull的方法。

對於有類似問題並看到error: cannot open.git/FETCH_HEAD: Permission denied while not running as sudo,delete.git/FETCH_HEAD 或將其所有權更改為遠離 root,它應該正常執行。 這是因為git pull涉及git fetch ,但由於它不成功,它留下了 root:root 擁有的空 FETCH_HEAD,非特權用戶無法寫入。

這與 Git 或 GitLab 無關。 這只是 sudo 在 Unix / Linux 系統上運行的基本方式。

這些系統具有用戶身份或 UID 的概念。 在操作系統級別,您的 UID 是一個簡單的 integer 編號。 數字 0 是為超級用戶保留的,他們可能(這取決於您可以單獨啟用的許多操作系統選項和安全功能)是否能夠粗暴地運行普通用戶權限。

除了UID之外,系統的rest還提供了一個人的主目錄等概念。 配置文件——包括~/.ssh/config~/.gitconfig往往位於主目錄中; 事實上, ~這里代表那個目錄。 (用$HOME替換~是由 shell 完成的,而不是由操作系統完成的。Python為此具有os.path.expanduser ;它模擬了典型的 Z2591C98B701245FE62491898B1E 擴展。)

例如,ssh 命令使用您的主目錄來定位您的.ssh/config文件以及默認的.ssh/id_rsa.ssh/id_rsa.pub文件。 So when you, as yourself, run ssh git@gitlab.our.instance.name , ssh is able to "log in" to gitlab.our.instance.name as user git if your personal ssh configuration has the right keys in it.

當您運行sudo <command>時,sudo運行的命令以超級用戶身份運行,即 UID 為零。 它還以超級用戶的主目錄作為主目錄運行。 因此,使用的 ssh 配置和密鑰是~root/.ssh/*中的那些,而不是~jake/.ssh/*或您自己的個人主目錄中的那些。

除此之外,運行的命令代表 uid 零運行。 如果 uid 零(“超級用戶”)可以繞過大多數正常權限,則該用戶可以創建新文件,例如.git/FETCH_HEAD ,即使.git歸您所有並且不授予 UID 零權限。 但是當該用戶確實創建了這樣一個文件時,新文件歸該用戶所有,即由root擁有。

如果完全有可能不這樣做,那么長和短永遠不會通過 sudo 運行任何東西,因為這樣做會繞過太多的權限檢查(取決於操作系統配置和其他細節)留下太多由超級用戶擁有的文件用戶,以便只有超級用戶有權對這些文件執行任何操作,從而迫使您繼續使用sudo進行自我延續的舞蹈,從而使您的系統不安全。

我必須以 sudo 身份運行此腳本...

就是問題所在。 修復 進行設置,以便腳本可以作為一些普通的、非特殊特權的用戶運行。

我意識到這是一個“醫生,當我這樣做時很痛”的案例:“那么不要那樣做”-但這就是答案,真的,不要那樣做,如果你發現了,出於某種可怕的原因,你必須這樣做一兩納秒,寫一些東西在那一兩納秒內完成,然后將所有權轉移回你並退出,讓你自己繼續。 盡可能少做超級用戶,因為您在這里所做的一切都必須由安全專家進行三重安全檢查。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM