Shell_exec在浏览器中执行时不工作| SSH | SCP | keygen


shell_exec not working when excuted from browser | ssh | scp | keygen

我想做的是:

    从浏览器执行"shellUnlock.php"
  1. 然后从"shellUnlock.php"执行"scriptUNLOCK.sh"
  2. 然后从scriptUNLOCK.sh创建"resultUNLOCK.log"
  3. 然后在浏览器中显示"resultUNLOCK.log"

指出:

  • 对于SSH,我使用了keygen,所以我不必再从我的服务器插入任何密码。
  • 我使用SCP复制在"data . server"中创建的"resultUNLOCK.log"。到我自己的文件夹
  • 我已经从浏览器中尝试过了,但是它根本没有显示任何输出。
  • 脚本工作良好,当我从putty执行,但从shell_exec它不工作。
  • 我没有权限在服务器上安装任何东西。

我的"shellUnlock.php"文件

$myfile = fopen("nameUSER.txt", "w") or die("Unable to open file!");
$txt = "USERNAME";
fwrite($myfile, $txt);
fclose($myfile);
shell_exec('./scriptUNLOCK.sh');
if (file_exists("resultUNLOCK.log"))
   echo readfile("resultUNLOCK.log");
}else{
   echo "Please Try";
}

my "scriptUNLOCK.sh" script

#!/bin/bash
HOST='user@da.serv.er'
HOME='/home/web/UNLOCK'
DIR='/somewhere/script/UNLOCK/'
cd ${HOME}
while read nameUSER
do
ssh ${HOST} <<END_SCRIPT
cd ${DIR}
unlock.sh ${nameUSER} > resultUNLOCK.log
exit
END_SCRIPT
cd ${HOME}
scp ${HOST}:${DIR}resultUNLOCK.log ${HOME}
done < nameUSER.txt

现在请帮助我。我完全糊涂了。谢谢。

如果脚本在命令行运行时工作正常,但当您通过web服务器触发它时却没有,则必须是权限或/和路径问题。

确保apache用户(无论是www-data, www或apache默认)有写访问解锁文件夹,我认为它会工作。您可能应该更改"HOME"变量的名称,因为HOME是Linux中的固定环境变量。我不知道这是不是一个问题,但我还是会改名,以避免混乱。

最好的方法是通过groups

    sudo usermod -a -G www-data <apache_user>
    sudo chgrp -R www-data /somewhere/script/UNLOCK/
    sudo chmod -R g+w /somewhere/script/UNLOCK/

因此,至少通过putty登录的用户必须具有修改目录可访问性的权限。如果没有,您可以联系您的系统管理员或使用您有权访问的其他文件夹。

我希望这对你有帮助。亲切的问候

问题解决了!

我直接使用crontab执行脚本,而不是在php中使用shell_exec。如果时间有限,我肯定能找到其他最好的办法来解决这个案子。但时间迫使我。: D好吧,至少它工作!

谢谢所有. . !