无法从PHP向TMUX会话发送命令

时间:2014-10-31 02:10:02

标签: php html linux bash tmux

我有一个运行Minecraft服务器的TMUX会话,我正在为服务器创建一个Web界面。

目前我有以下文件:

command.sh

 #!/bin/bash
 tmux send-keys -t minecraft C-z "$@" Enter

的index.php

<?PHP
    if($_POST) {
        $commandString = $_POST['inputCommand'];
        $output = shell_exec('./command.sh $commandString');
        echo "<pre>$output</pre>";
        }
?>
    <form method="post">
        <input type="text" name="inputCommand" placeholder="Type Command"/>
        <input type="submit" value="Execute" />
    </form>

command.sh在终端中工作,我可以按照

的方式使用所有标准命令
 ./command.sh "/help"

但是我无法使用上述方法从php执行此脚本。我已将www-data和www-user添加到sudoers并尝试

shell_exec('sudo ./command.sh $commandString')

但这也没有奏效。

单击提交按钮时,将回显输出,但它是空白的。

有人可以帮忙指出我执行脚本的方法出错了吗?

<小时/> 的修改 我已经拍了两个截图,一个在前,一个在后面进一步澄清。

enter image description here

1 个答案:

答案 0 :(得分:9)

command.sh遇到问题并向stderr输出内容。 shell_exec只返回给你stdout,所以你没有看到错误。尝试附加&#34; 2&gt;&amp; 1&#34;到你的命令结束,如

$output = shell_exec('./command.sh $commandString 2>&1');

这会将stderr发送到stdout,让你看看发生了什么。删除&#34; 2&gt;&amp; 1&#34;一旦你调试了问题。正如评论中指出的那样,我想实际的问题是你使用的是单引号,这意味着$ commandString正在按字面解释。请改用双引号!

警告!!! 这真的很不安全。您将从POST获取的未经过验证的参数传递给以sudoers中的用户身份运行的命令。无论两个登录屏幕如何,您都应该清理输入。