簡體   English   中英

通過 SSH 訪問遠程 Git 存儲庫時使用 su/sudo

[英]Using su/sudo when accessing remote Git repositories over SSH

假設在 Linux 服務器上有一個遠程 Git 存儲庫R。 R歸用戶U所有,該用戶根本不允許通過 SSH 進行遠程登錄(例如root )。 該用戶既不能使用基於密碼的認證,也不能使用基於密鑰的認證。 什么允許的,但是,被登錄為不同的用戶,然后使用susudo發出命令當U。

是否可以將這兩種方法結合起來,以便 Git 在遠程服務器上使用susudo來訪問存儲庫?

或者,是否有另一種方法可以訪問R而不更改其訪問權限或為U啟用 SSH 登錄?

PS:我不介意手動輸入密碼,例如在su提示符下,只要 Git 處理其余的。

編輯:

從評論看來,我需要澄清我想做這樣的事情的原因。 R跟蹤的文件是相關服務器正在使用的系統文件 - R不是裸存儲庫。 這意味着存儲庫無法真正移動,並非沒有很多技巧。

讓 Git 使用sudo將允許使用保護這些文件的相同安全模型訪問R ,而不是通過必須單獨配置和同步的單獨途徑。

哦,你可以

git config remote.origin.uploadpack "sudo -u U git-upload-pack"

git fetchsudo用於名為origin的遠程。

您需要確保將 sudo 設置為允許此用戶在沒有密碼的情況下執行此命令,因為我認為無法提示輸入密碼。

來源:

我發現自己想做一些類似的事情,並發現這個金塊完全埋在man git-config

我應該指出,這僅完成了一半的工作,因為我只需要git fetch即可工作。 我想你可以用remote.origin.receivepack做類似的事情以使git push工作,但我還沒有嘗試過。

比 sshd dameon 更容易的是建立另一個偵聽器:設置一個 Apache,它:

  • 可以以root身份運行(如“我如何root身份運行 Apache? ”中所述,這不是一個好主意/做法,因為在 Apache 中發現的任何新漏洞都可以被利用為... root
  • 可以將 git 查詢重定向到git-http-backend腳本,該腳本允許通過 http 執行 git 命令(稱為smart http記錄在此處

這樣,您就不必擔心sudosu

如果需要,您可以將其與身份驗證步驟結合使用。

<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 客戶端訪問 - 可以完全訪問托管存儲庫。

您唯一必須做的是:

  1. 轉到服務器上的/etc/passwd
  2. 找到您想要授予 git-access 的用戶行(可能它的名字是git

    警告:不要更改當前用戶的入口! 您將無法再通過 shell 登錄!

  3. 將該用戶的 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.

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