PHP выполнить команду SSH2 - PullRequest
0 голосов
/ 13 апреля 2020

У меня проблемы с PHP командами SSH2. Итак, я успешно соединил свой выделенный сервер с моим приложением, но я не знаю, как выполнить команду с этим. Я использую phpsclib (http://phpseclib.sourceforge.net), когда я пишу что-то вроде

echo $ssh->read('username@username:~$');
$ssh->write("ls -la\n");
echo $ssh->read();

Это даст мне список из root, но проблема в том, что я не хочу быть в root. Мне нужно cd / another_file и выполнить команду, которая запустит какой-нибудь игровой сервер. Я пробовал что-то вроде

$ssh->write("cd /another_file");
$ssh->write("my command here");

Но безуспешно, он показывает команды в одной строке. Есть идеи, как это сделать?

1 Ответ

0 голосов
/ 13 апреля 2020

У вас есть несколько вариантов.

  • Цепочка команд с помощью $ssh->write():

    $ssh->write("cd /another_file && ls -la\n");
    

    ... или ...

    $ssh->write("cd /another_file; ls -la\n");
    
  • Цепочка команд с помощью $ssh->exec(). Работает так же, как и выше, за исключением того, что вам не нужно добавлять \n к вашей команде и вам не нужно беспокоиться о $ssh->read().

  • Делать несколько $ssh->write() звонки, что ваша текущая попытка пытается сделать. Но он делает это неправильно:

    $ssh->write("cd /another_file");
    $ssh->write("my command here");
    

    В своем первом фрагменте кода вы добавляете \n, но вы не делаете этого в этих строках. Это необходимо, потому что, когда вы находитесь в интерактивной оболочке, оболочка узнает, что вы закончили вводить команду, потому что вы нажали кнопку ввода. Вот как Linux узнает, что вы закончили печатать и готовы к выполнению команды.

    Вам также необходимо прочитать подсказку перед выполнением следующей команды. например. $ssh->read('[prompt]') или все, что подходит для вашей системы. Я полагаю, вы могли бы просто пропустить передачу параметра в $ssh->read() все вместе, как вы это делали в своем первом фрагменте кода, но тогда потребуется * 1030 или около того для $ssh->read(), чтобы вернуть любой вывод, когда он мог бы альтернативно возвращать вывод мгновенно.

...