在網頁瀏覽器上從 php 檔案執行 rsync shell 指令

在網頁瀏覽器上從 php 檔案執行 rsync shell 指令

首先,我們想要將變更從一個系統移至另一個系統,為此,我們在synchfolders.sh檔案中有一個 shell 腳本,如下所示

rsync -av --delete -e 'sshpass -p Wordpress@123 ssh -p 22' [email protected]:/var/www/html/prosync/wp-content/plugins/ /var/www/html/devsync/wp-content/plugins >> /var/www/html/devsync/wp-content/mysynclog.txt

我們想要在 PHP 檔案中執行這個 shell 腳本shell_exec(),當從瀏覽器而不是 rsync 指令執行這個 PHP 檔案時,所有指令都在執行,但rsync沒有執行。我們已經搜索了 SO 中的內容並獲得了鏈接https://stackoverflow.com/questions/30772816/php-exec-rsync-ssh-to-remote-server-not-working/30773063#30773063,正如這裡所說,我們嘗試從命令列執行 PHP 檔案並且工作正常,但不能通過瀏覽器。為什麼,請讓我們知道我們哪裡做錯了。先致謝

答案1

一般來說:在不從常用的互動式 shell 執行的腳本中,您需要確保使用絕對路徑/usr/bin/rsync即代替rsync)或設定正確的環境對於 $PATH 來說具有良好的價值


作為額外的改進:您應該真正設定基於金鑰的 ssh 驗證以在腳本中使用,而不是基於密碼的身份驗證。

當您停止使用密碼並開始使用金鑰時,您可以鎖定並保護ssh 伺服器(停用密碼身份驗證將阻止暴力攻擊),更重要的是,您可以對使用特定金鑰進行身份驗證時允許的內容添加限制,即這是你無法使用密碼完成的事情。

您可以限制腳本中使用的金鑰,使其只能用於來自特定主機的 rsync。

這樣,即使您的腳本被洩露,被盜的也不會是您的根密碼(授予對伺服器的完全控制權),而只是授予有限存取權限的私鑰(如果可以使用的話)。

相關內容