Apache-2.2

從 php 腳本執行 git pull

  • January 14, 2020

我正在嘗試使用 Git、GitHub 和 SSH 的 Perfect Workflow,但似乎我無法執行git pull。我試過git status了,很好。

git pull 2>&1我得到:

錯誤:無法打開 .git/FETCH_HEAD:權限被拒絕

我試圖將 .git dir chmod 到 777,但沒有運氣。

當我whoami從瀏覽器執行時,它顯示:apache

    • 編輯 - -

我剛剛做了chown apache:apache -R .git,現在我得到了:

無法創建目錄“/.ssh”。主機密鑰驗證失敗。致命:遠端意外掛斷

無法創建目錄“/.ssh”。主機密鑰驗證失敗。致命:遠端意外掛斷

閱讀並考慮您的錯誤資訊。主機密鑰儲存在 ~/.ssh/known_hosts 文件中。你的 Apache 使用者有“/”作為它的主目錄,它絕對沒有也不應該有對 root 的寫訪問權。

我建議您為此創建一個使用者帳戶……也許gitpull-user或什麼。確保它有一個可用的主目錄,即使它是非典型的。以該使用者身份登錄並創建一個 shell 腳本來完成您以該使用者身份嘗試執行的操作。當然,您還必須將適當的 id_rsa 密鑰複製到使用者的帳戶等。

通過將此行添加到 /etc/sudoers 來配置 sudo 以啟動該腳本

apache ALL = (gitpull-user) NOPASSWD: /path/to/script.sh`

如果您遇到“無 TTY”問題:

Defaults:apache !requiretty

更改您的 PHP 腳本以呼叫sudo -u gitpull-user ./script.sh


可以將 Apache 的主目錄更改為“真實”位置,然後將密鑰放在那裡,但這會帶來風險,即您的數據必須由 apache 擁有,並且如果守護程序受到破壞,則可以讀取密鑰. 建立第二個使用者提供了一定程度的隔離。

引用自:https://serverfault.com/questions/362012