通过php与linux的ssh2连接

通过php与linux的ssh2连接,php,linux,ssh,gnu-screen,Php,Linux,Ssh,Gnu Screen,我试图通过php将我的minecraft白名单更新到我的linux服务器。 连接正常,但我不知道他为什么不发送我的命令将用户添加到白名单 这是我的代码: $name=$_POST['name']; $mc=$_POST['mc']; if($ssh = ssh2_connect('127.0.0.1', 22)) { if(ssh2_auth_password($ssh, 'root', 'password')) { $stream = ssh2_exec($ssh, 'screen -

我试图通过php将我的minecraft白名单更新到我的linux服务器。 连接正常,但我不知道他为什么不发送我的命令将用户添加到白名单

这是我的代码:

$name=$_POST['name'];
$mc=$_POST['mc'];
if($ssh = ssh2_connect('127.0.0.1', 22)) {
if(ssh2_auth_password($ssh, 'root', 'password')) {
    $stream = ssh2_exec($ssh, 'screen -R '.$mc.' && '.'whitelist add '.$name.' && whitelist reload');
    stream_set_blocking($stream, true);
    $data = '';
    while($buffer = fread($stream, 4096)) {
        $data .= $buffer;
    }
    fclose($stream);
    echo $data;
}
}

您正在使用
&&
连接命令,所有命令都将在当前shell中一个接一个地执行,而不是在屏幕内执行<代码>屏幕可以在所选会话内执行命令,但有自己的语法。例如,参见或。在您的情况下,命令必须如下所示:

screen-S session\u name-X stuff$'whitelist add user\u name&&whitelist reload\n'
注意
\n
字符串末尾的符号。它是执行命令所必需的,因为
screen
不会真正执行它,
screen
将如手册所述“将指定的命令发送到正在运行的屏幕会话”。考虑屏幕将代替您键入命令。当您键入命令时,必须按Enter/Return来执行它

在PHP中,可以通过以下方式执行命令:

$stream=ssh2\u exec($ssh,“screen-S$mc-X stuff\$'whitelist add$name&&whitelist reload\\n');

将未过滤的POST数据发送到shell永远不会有好结果。您想在屏幕内执行命令
白名单添加xxx和白名单重新加载
?是的,首先我想用screen-R mctechnic打开屏幕,然后我想将userxyz添加到白名单oh 2答案第一次没有看到xD@stackoverflow,我试图在没有它的情况下执行它后屏幕-R mctechnic也不起作用