Git:透過 ssh 推送到 root 擁有的儲存庫,並停用 ssh root 登入

Git:透過 ssh 推送到 root 擁有的儲存庫,並停用 ssh root 登入

這可能嗎?

摘要,我正在伺服器上運行 puppet master,理想情況下我們希望透過 ssh 停用 root 登錄,如果需要 root 訪問權限,我們希望強制透過 sudo 進行所有訪問

然而,我們使用 git 儲存庫安裝了 puppet 來管理清單,該儲存庫目前由 root 擁有,目前我只知道 2 個解決方案

  1. (不太理想)僅允許透過金鑰驗證進行 root 存取 - 如果是這樣,我可以將其鎖定為僅允許 git push 命令嗎?
  2. 作為不同所有者擁有 /etc/puppet 中的存儲庫 - puppet 能可靠地工作嗎?
  3. 相關的 Sudo 配置和命令可以解決這個問題嗎?

答案1

Git 儲存庫可以設定為維護群組寫入權限(--shared建立儲存庫時的選項)。使用它,您可以將需要存取儲存庫的任何帳戶新增至特定群組,以便他們可以存取它。

我為我們的 git 伺服器這樣做。我還在每個用戶的主目錄中放置了一個指向他們有權訪問的每個存儲庫的符號鏈接,以便每個人都可以使用相對 URL 進行訪問。

答案2

為了回答我自己的問題,我查看了丹尼爾提供的信息,但它不相符,我研究了 git group write 並遇到了http://andyregan.net/blog/archives/504

透過將我的儲存庫群組所有權授予一個公共群組(puppet)並將相關使用者新增至該群組,然後執行:

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 用戶(或我的非root 使用者)下- 伺服器上的特權帳戶)Win Win

答案3

我喜歡做的是在我推送到的 puppet master 上有一個「暫存」裸 git 儲存庫,它運行各種預先提交和提交後掛鉤。預先提交掛鉤檢查 puppet 語法(以便無法提交語法錯誤的程式碼),而提交後掛鉤實際上將程式碼放入 /etc/puppet 中,並重新啟動 Apache(以修復 puppet 2.6 中的舊快取錯誤)

擁有一個可以推送的暫存區域可以使部署 puppet 程式碼的過程更加原子化。否則,你的傀儡師可能會向客戶提供半承諾的程式碼。

相關內容