2014-09-23 76 views
1
使用了shell_exec時

我努力讓自己在到位桶鉤,執行一個PHP文件,並將該文件執行拉出指令:的Git拉拒絕「權限」,在PHP

shell_exec('/usr/local/cpanel/3rdparty/bin/git pull'); 

拉命令作品罰款SSH控制檯上,但PHP返回錯誤:

Permission denied (publickey). fatal: Could not read from remote repository.

Please make sure you have the correct access rights and the repository exists.

命令--version顯示與git的路徑是正確的,whoiami兩者都返回相同的用戶,所以我不知道它是否是一個權限問題。

會發生什麼問題?

編輯:的另一個問題:我添加了混帳沒有PHP的工作,只有完整的路徑如上別名。通過終端它工作得很好。也許這是爲什麼鍵不工作在PHP中的原因。

編輯2:$PATH是兩個不同。

+0

聽起來像你的SSH密鑰沒有添加到該git存儲庫(權限問題)。 – Alex 2014-09-23 21:39:38

+2

你怎麼調用這個包含shell_exec()的腳本?通過webrowser/http?在這種情況下,它不應該返回Web服務器的UID,而不是你得到的「同一用戶」? – 2014-09-23 21:39:55

+0

公鑰在存儲庫上。我可以從服務器上拉出來,問題只在於從php文件運行命令時。是的,我通過http運行php文件,whoami返回相同的用戶名。是否有可能讓用戶具有相同的名稱但具有不同的權限? – 2014-09-23 22:30:40

回答

2

當您在PHP腳本中運行這個命令,你沒有運行命令自己:

shell_exec('/usr/local/cpanel/3rdparty/bin/git pull'); 

它從終端控制檯工作的原因是因爲你自己從控制檯運行的命令。但在Web服務器上,您不是運行該命令的用戶。請記住:當您在Web服務器上運行PHP時,它是一個Apache模塊。這意味着Web服務器用戶(在某些系統上可能是www-data,root或甚至是apache)正在運行PHP腳本,該腳本將運行shell_exec命令。

所以它永遠不會工作,因爲你有它設置。也許你可以把一些東西拼湊在一起,這樣就可以讓Web服務器使用密鑰對來達到這些目的,但是這看起來像是等待發生的安全風險。

+0

謝謝。我是一個完整的小白。我明白,用戶可能會有所不同,但是當我運行** shell_exec('whoami')**時,它表示用戶與從termianl運行時相同。當我列出正在運行的用戶時,它只列出這個用戶並且說它正在運行apache。這很混亂。正如我上面所說的,** $ PATH **在兩個方面都不同,它是否意味着什麼? – 2014-09-24 12:18:54

+0

@BrunoMuller **「shell_exec('whoami'),它表示用戶與我從終端運行時相同」**當您從終端運行PHP時,您正在運行自己登錄終端。 Apache作爲模塊運行的PHP以另一個用戶身份運行。兩件完全不同的事情。除非我混淆了:你是否試圖從終端運行PHP腳本來執行此操作? – JakeGould 2014-09-24 14:01:27