我有一个要求,Web 应用程序 (php) 必须在另一台服务器上运行脚本。我通过 root 用户对 apache 用户进行 sudo 测试,以 apache 用户身份运行远程脚本。远程计算机上的脚本已正确执行。但是,当我通过 Web 浏览器的请求运行的 php 脚本运行它时,它无法正常运行。有什么想法可以解决这个问题吗?
- 通过 root 登录
更改apache的sesu访问权限
sudo /usr/sbin/visudo Cmnd_Alias WEBREMOTE = /usr/bin/ssh, /var/www/html/test_shell.sh apache ALL=(ALL) NOPASSWD:WEBREMOTE
sudo 到 apache 用户
sudo -u apache -s
远程运行脚本
sudo -S ssh [email protected] 'bash -s' < /var/www/html/test_shell.sh test_param & > /dev/null
从远程机器查看日志,shell脚本可以正常运行
当您尝试通过 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页面也不会导致错误,我是否错过了这里的任何设置?