Linux
SSH 不允許使用具有組可讀權限的密鑰
我有一個開發 git 伺服器,當
live
分支被推送到時,它會部署到實時伺服器。每個使用者都有自己的登錄名,因此進行post-receive
實時部署的鉤子在他們自己的使用者下執行。因為我不想在遠端實時伺服器上維護使用者公鑰作為授權密鑰,所以我製作了一組“屬於 git 系統的密鑰”以添加到遠端實時伺服器(在
post-receive
我正在使用的鉤子中)$GIT_SSH
使用選項設置私鑰-i
)。我的問題是,由於所有使用者都可能想要部署到 live,git 系統的私鑰必須至少是組可讀的,而 SSH 真的不喜歡這樣。
這是錯誤的範例:
XXXX@XXXX /srv/git/identity % ssh -i id_rsa XXXXX@XXXXX @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: UNPROTECTED PRIVATE KEY FILE! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Permissions 0640 for 'id_rsa' are too open. It is required that your private key files are NOT accessible by others. This private key will be ignored. bad permissions: ignore key: id_rsa
我環顧四周,希望能找到一些迫使 ssh 通過連接的方式,但我什麼也沒找到,但人們盲目地說你不應該允許訪問除單個使用者之外的任何東西。
這是一個很好的簡單和安全的方法。
為 ssh 傳輸創建一個新使用者,我稱之為 git-sync。在伺服器上為 git 儲存庫創建一個具有組成員身份的類似使用者。將 sync-user 的公鑰添加到該使用者的 authorized_keys2 文件中。我假設 git 使用者都是 gitgroup 的成員。確保 git-sync 使用者也是該組的成員。
現在編輯您的 /etc/sudoers 文件以包含如下行:
%gitgroup ALL=(git-sync) NOPASSWD: /usr/bin/git
這將允許 gitgroup 組的任何成員在沒有密碼的情況下將命令 /usr/bin/bit 作為 git-sync 執行。
現在在你的 post-receive 鉤子中加入這樣的東西:
sudo -u git-sync /usr/bin/git push origin