[英]Using su/sudo when accessing remote Git repositories over SSH
假設在 Linux 服務器上有一個遠程 Git 存儲庫R。 R歸用戶U所有,該用戶根本不允許通過 SSH 進行遠程登錄(例如root
)。 該用戶既不能使用基於密碼的認證,也不能使用基於密鑰的認證。 什么是允許的,但是,被登錄為不同的用戶,然后使用su
或sudo
發出命令當U。
是否可以將這兩種方法結合起來,以便 Git 在遠程服務器上使用su
或sudo
來訪問存儲庫?
或者,是否有另一種方法可以訪問R而不更改其訪問權限或為U啟用 SSH 登錄?
PS:我不介意手動輸入密碼,例如在su
提示符下,只要 Git 處理其余的。
編輯:
從評論看來,我需要澄清我想做這樣的事情的原因。 R跟蹤的文件是相關服務器正在使用的系統文件 - R不是裸存儲庫。 這意味着存儲庫無法真正移動,並非沒有很多技巧。
讓 Git 使用sudo
將允許使用保護這些文件的相同安全模型訪問R ,而不是通過必須單獨配置和同步的單獨途徑。
哦,你可以
git config remote.origin.uploadpack "sudo -u U git-upload-pack"
讓git fetch
將sudo
用於名為origin
的遠程。
您需要確保將 sudo 設置為允許此用戶在沒有密碼的情況下執行此命令,因為我認為無法提示輸入密碼。
來源:
我發現自己想做一些類似的事情,並發現這個金塊完全埋在man git-config
我應該指出,這僅完成了一半的工作,因為我只需要git fetch
即可工作。 我想你可以用remote.origin.receivepack
做類似的事情以使git push
工作,但我還沒有嘗試過。
比 sshd dameon 更容易的是建立另一個偵聽器:設置一個 Apache,它:
root
身份運行(如“我如何以root
身份運行 Apache? ”中所述,這不是一個好主意/做法,因為在 Apache 中發現的任何新漏洞都可以被利用為... root
)git-http-backend
腳本,該腳本允許通過 http 執行 git 命令(稱為smart http , 記錄在此處) 這樣,您就不必擔心sudo
和su
。
如果需要,您可以將其與身份驗證步驟結合使用。
<Location /git>
AuthType Basic
AuthName "Private Git Access"
AuthUserFile "/etc/git-auth-file"
Require valid-user
</Location>
您甚至可以使用 gitolite添加授權。
Git 已經帶有一些服務器功能,使客戶端用戶可以訪問存儲庫。 一種似乎最適合您需求的服務解決方案是使用git-shell
。
git-shell
允許您將 ssh-users 與 git-repositories 聯系起來。 成功驗證后,這些用戶最終會進入 git-shell,它禁止 shell 操作,但是 - 如果通過 git 客戶端訪問 - 可以完全訪問托管存儲庫。
您唯一必須做的是:
/etc/passwd
找到您想要授予 git-access 的用戶行(可能它的名字是git
)
警告:不要更改當前用戶的入口! 您將無法再通過 shell 登錄!
將該用戶的 shell-reference 從 (fe) /bin/bash
更改為/usr/bin/git-shell
(具體路徑取決於您的系統配置)。
在pro git book中詳細描述了這種場景的設置過程。
為了通過權限管理增強 gits 簡單服務功能(在未來),您可以使用gitolite - 它使用gitolite-shell
(並取代 git-shell)來提供它的神奇超能力。
一個非常簡單的解決方案是將 repo git clone
到“不同用戶”(我將其稱為 U2)的目錄中,然后對該 repo 使用ssh
訪問。 git 是一個去中心化的 VCS,所以沒有所謂的“擁有”回購。 所有存儲庫都處於平等地位。
您可以偶爾使用遠程機器上的sudo
手動將 U2 存儲庫中的更改推送回 U 存儲庫,或者您甚至可以設置一個提交后掛鈎,自動將 U2 存儲庫的更改推送回原始 U 存儲庫。 只要沒有其他人直接修改 U 存儲庫,提交后掛鈎就可以正常工作。
如果您確實有人直接修改了 U 存儲庫,則需要有人在 U2 存儲庫或 U 存儲庫中引入更改並定期合並它們。 根據這些更改的范圍,合並可能是微不足道的,也可能是復雜的。 但是,除非您有充分的理由,否則我建議禁止任何人直接修改 U 存儲庫。 在這種特殊情況下,無論如何,U2 存儲庫都將成為事實上的權威存儲庫。 因此,從某種意義上說,您可以將原始 U 存儲庫全部刪除。
這實際上是另一種簡單的方法,即通過移動 U 存儲庫,使 U2 用戶可以直接訪問它。 我知道您在問題中說您不想修改原始權限,但這聽起來像是對 repo 的一種愚蠢且非常不標准的安排。 git repo 的全部意義在於使其可用於更改,如果您不能簡單地做到這一點,那么我會說您的初始配置存在缺陷。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.