Как получить результат от команды, выполненной в PHP на удаленном SSH-сервере, используя PuTTY? - PullRequest
0 голосов
/ 07 июня 2019

Я пытаюсь выполнить команду на моем Raspberry Pi через SSH и получить результат в моем PHP-скрипте на моей машине с Windows.В настоящее время я могу выполнить команду на своем RasPi, но я не получаю никаких результатов обратно в скрипт PHP.

Код, который я использую для этого:

<?php

$cmd = "C:\\path_to_putty\\putty.exe -ssh pi@RasPiIP -pw raspberry -m C:\\path_to_test.txt\\test.txt";
$result = shell_exec($cmd);
echo $result;

?>

Для отправки командмоему RasPi код работает.Я протестировал несколько раз, в качестве примера изменив test.txt на sudo reboot, и это сработало как задумано.Я использую PuTTY для отправки своей команды (test.txt в настоящее время является списком nfc, который возвращает подключенные сканеры и т. Д. Здесь не важно) в RasPi.

Чего я хочу добиться, так это того, что $result содержитвернул данные при выполнении моей команды.

Возможно ли это сделать?Если да, то как (любая помощь приветствуется).Если нет, то могут ли они быть другими способами приблизиться к этому?

Решение проблемы возможного дубликата: я использую Windows Machine, а также пытаюсь получить результат (одной команды) для повторного использования в моем PHPскрипт.В другом вопросе пользователь пытается сохранить полный журнал консоли и сохранить его в другом файле.

1 Ответ

2 голосов
/ 07 июня 2019

Во-первых, не используйте PuTTY.PuTTY - это приложение с графическим интерфейсом, предназначенное для интерактивного использования.Используйте Plink, который является эквивалентом командной строки / консоли PuTTY и предназначен для автоматизации команд.Будучи консольным приложением, оно имеет стандартный вывод, который можно прочитать на PHP (PuTTY как приложение с графическим интерфейсом не имеет стандартного вывода).

С Plink вы также можете указать команду в командной строке Plink,поэтому вам не нужно создавать командный файл test.txt.

В любом случае, нельзя сделать так, чтобы PuTTY или Plink отделяли только выходные данные команды (по крайней мере, не из командной строки).

Но что вы можете сделать, это напечатать какой-нибудь заголовок / трейлер, чтобы различить начало и конец вывода команды, например:

plink.exe -ssh pi@RasPiIP -pw raspberry "echo start-of-command && command && echo end-of-command"

А затем в PHP вы можете найтиstart-of-command и end-of-command для определения того, какая часть вывода Plink действительно является выводом команды.


В любом случае вам лучше использовать библиотеку PHP SSH для достижения того, чего вы хотите, а незатем вождение внешнего приложения.Например, phpseclib .Но это совершенно другой вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...