подключение ssh2 к linux через php

я пытаюсь обновить свой белый список майнкрафт через php на мой сервер 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;
}
}

person Baldrian    schedule 28.05.2016    source источник
comment
Отправка нефильтрованных данных POST в оболочку никогда не закончится хорошо.   -  person rjdown    schedule 28.05.2016
comment
Вы хотите выполнить команду whitelist add xxx && whitelist reload внутри экрана?   -  person Andrew    schedule 28.05.2016
comment
да, сначала я хочу открыть экран с помощью экрана -R mctechnic, затем я хочу добавить пользователя xyz в белый список, о, 2 ответа не видел xD в первый раз @stackoverflow, я пытался сделать это без экрана POST -R mctechnic тоже не работал   -  person Baldrian    schedule 28.05.2016


Ответы (1)


Вы присоединяетесь к командам с помощью &&, и все они будут выполняться одна за другой в вашей текущей оболочке, а не внутри экрана. screen может выполнять команды внутри выбранного сеанса, но со своим собственным синтаксисом. См., например, этот вопрос или руководство. В вашем случае команда должна выглядеть так:

screen -S session_name -X stuff $'whitelist add user_name && whitelist reload\n'

Обратите внимание на символ \n в конце строки. Это необходимо для выполнения команды, потому что screen на самом деле не выполнит ее, screen «отправит указанную команду в сеанс работающего экрана», как говорится в руководстве. Учтите, что экран будет вводить команду вместо вас. И когда вы вводите команду, вы должны нажать Enter/Return, чтобы выполнить ее.

В PHP вы можете выполнить команду следующим образом:

$stream = ssh2_exec($ssh, "screen -S $mc -X stuff \$'whitelist add $name && whitelist reload\\n'");
person Andrew    schedule 28.05.2016