首先,我們想要將變更從一個系統移至另一個系統,為此,我們在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。
這樣,即使您的腳本被洩露,被盜的也不會是您的根密碼(授予對伺服器的完全控制權),而只是授予有限存取權限的私鑰(如果可以使用的話)。