Git:通過 ssh 推送到禁用 ssh 根登錄的根擁有的儲存庫
這甚至可能嗎?
總結,我在伺服器上執行 puppet master,理想情況下我們希望通過 ssh 禁用 root 登錄,如果需要 root 訪問,我們希望通過 sudo 強制所有訪問
但是我們使用 git repo 安裝了 puppet 來管理清單,這個 repo 目前歸 root 所有,目前我只知道 2 個解決方案
- (不太理想)僅允許通過密鑰身份驗證進行 root 訪問 - 如果是這樣,我可以將其鎖定到什麼以僅允許 git push 命令?
- 作為不同的所有者擁有 /etc/puppet 中的 repo - puppet 會可靠地工作嗎?
- 相關的 Sudo 配置和命令可以解決這個問題嗎?
為了回答我自己的問題,我查看了 Daniel 提供的資訊,但它沒有統計,我研究了 git group write 並遇到了http://andyregan.net/blog/archives/504
通過將我的儲存庫組所有權授予一個公共組(木偶)並將相關使用者添加到該組,然後執行:
chmod -R g+swX /etc/puppet/ cd /etc/puppet git repo-config core.sharedRepository true
對我來說工作得很好,我可以推送到 root 擁有的儲存庫,puppet 仍然可以工作,我不使用 root ssh 登錄這樣做
贏
更新
我在 puppet 上也遇到了這個問題,但希望以更好的方式處理它,並通過在 env_reset 行之後添加以下內容,或者使用正確的 sudoers 配置解決了這個問題:
Defaults env_keep += SSH_AUTH_SOCK
這允許我執行這樣的命令:
cd /etc/puppet && sudo git pull && sudo git submodule sync && sudo git submodule update --init --recursive
比如說一個 Rakefile(我的使用者已經通過 Sudo 獲得了 nopasswd 權限)並且一切都相應地工作。我實現的基本上是將我的 ssh-agent 轉發的 ssh-key 傳遞給 root 使用者,然後執行 git pull 就好像我以非 root 使用者身份連接而不將我的 ssh 密鑰儲存在 root 使用者(或我的非-伺服器上的特權帳戶)贏贏
可以將 Git 儲存庫配置為維護組寫入權限(
--shared
創建儲存庫時的選項)。使用它,您可以將需要訪問儲存庫的任何帳戶添加到特定組,以便他們可以訪問它。我為我們的 git 伺服器這樣做。我還在每個使用者的主目錄中放置了一個符號連結,指向他們有權訪問的每個儲存庫,因此每個人都可以使用相對 URL 進行訪問。