Подключение SSH к Linux через стек переполнения

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

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'");
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]