Webアプリケーション(php)が別のサーバーでスクリプトを実行する必要があるという要件があります。ルートを介してApacheユーザーをSudoし、Apacheユーザーとしてリモートスクリプトを実行します。リモートシステムのスクリプトが正しく実行されました。ただし、Webブラウザの要求に応じて実行されるPHPスクリプトを介して実行すると、正しく実行されません。この問題を解決する方法についてのアイデアはありますか?
- ルート経由でログイン
Apacheのsesuアクセス権の変更
sudo /usr/sbin/visudo Cmnd_Alias WEBREMOTE = /usr/bin/ssh, /var/www/html/test_shell.sh apache ALL=(ALL) NOPASSWD:WEBREMOTE
Apacheユーザーにsudo
sudo -u apache -s
リモートでスクリプトを実行する
sudo -S ssh [email protected] 'bash -s' < /var/www/html/test_shell.sh test_param & > /dev/null
リモートコンピュータのログを見ると、シェルスクリプトは正常に実行されます。
PHPのexecを介して同じスクリプトを実行しようとすると、コードは実行されません。
<?php $shellcmd = "sudo -S ssh [email protected] 'bash -s' < /var/www/html/test_shell.sh $test_param & > /dev/null"; $ret = exec($shellcmd); echo "<br />"; echo "shellcmd result: [$ret]"; $ret2=shell_exec($shellcmd); echo "<br />"; echo "shellcmd result: [$ret2]"; ?>
生成されたPHPはexecまたはexec_shellを介して空の結果のみを返し、test_shell.sh内のログはリモートシステムで実行されません。 PHPページでもエラーは発生しません。ここに設定がありませんか?