从浏览器中获取时,shell_exec无法正常工作ssh | scp |凯基

时间:2014-07-23 07:14:00

标签: php shell ssh shell-exec

我想做的是:

  1. 从浏览器
  2. 执行“shellUnlock.php”
  3. 然后从“shellUnlock.php”执行“scriptUNLOCK.sh”
  4. 然后从scriptUNLOCK.sh
  5. 创建“resultUNLOCK.log”
  6. 然后在浏览器中显示“resultUNLOCK.log”
  7. 注意:

    • 对于我使用keygen的SSH,所以我不必再从我的服务器插入任何密码。
    • 我使用SCP将“da.serv.er”中创建的“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";
    }
    

    我的“scriptUNLOCK.sh”脚本

    #!/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
    

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

2 个答案:

答案 0 :(得分:0)

如果从命令行运行脚本时脚本运行正常,但是当您通过Web服务器触发脚本时脚本不正常则必须是权限或/和路径问题。

确保apache用户(默认情况下为www-data,www或apache)具有对UNLOCK文件夹的写入权限,我认为它可以正常工作。 您应该更改“HOME”变量的名称,因为HOME是Linux中的修复环境变量。我不知道这是不是一个问题,但我会更改名称以避免混乱。

最好的方法是通过群组

    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登录的用户必须有权修改目录的可访问性。如果没有,您可以联系您的系统管理员或使用您有权访问的其他文件夹。

我希望这会有所帮助。 亲切的问候

答案 1 :(得分:0)

我的问题解决了!

而是在php中使用shell_exec,我使用crontab直接执行脚本。 如果我没有时间限制,我相信我能找到其他最佳解决方案来解决这个问题。 但是时间迫使我。 :d 好吧,至少IT工作!

谢谢大家......!