Выполнять команды на удаленной машине через PHP

Чтобы дать представление о моей среде:

У меня есть 3 машины A, B & C

A = веб-сервер, на котором работает php-сайт, который в основном служит интерфейсом для B & C

B = Linux Ubuntu машина, у меня есть root-доступ, SSH и все необходимое для работы на машине через SSH-клиент (у меня есть файл закрытого ключа .ppk для этого сервера)

C = сервер базы данных MySql, работающий в Linux

Я могу успешно выполнить запросы от A (php) на C (Mysql) и вернуть результаты. Но теперь я пытаюсь выполнить команды Linux на B из A.

Например.

У меня есть скрипт, который работает на B и хотел бы выполнить команду от A (php), чтобы показать состояние скрипта.

В командной строке сделать это легко - ./SomeScript status

Но я хочу показать статус этого скрипта на веб-сайте, который я размещаю на сервере А.

Даже просто проверьте время работы сервера B на сервере A.

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

Любой совет будет высоко ценится.

Спасибо

 David Chen10 июн. 2013 г., 18:30
Почему бы не разместить скрипт наB что дает конкретную информацию, такую как время безотказной работы, и может позволить запускать определенные программы? Вы хотите, чтобы скрипт проверял, что IP действительно с сервераA хоть.
 Stroes10 июн. 2013 г., 19:12
Да. у меня есть root-доступ на A & B
 Stroes10 июн. 2013 г., 18:38
Но как мне подключиться к B в первую очередь из A? и затем выполнить запрос / команду, особенно с открытым ключом, который у меня есть?
 Stroes10 июн. 2013 г., 18:35
Спасибо, посмотрите, что я могу сделать, проблема, которую я имею в том, чтобы отобразить результаты определенного скрипта на B на странице php на A
 amaster10 июн. 2013 г., 18:58
У вас есть права root и возможность запуска команд?A
 kainaw10 июн. 2013 г., 18:35
Результаты, скорее всего, выводятся в виде текстового или HTML-файла. После того, как выходной файл создан на B, отправьте его в A.

Ответы на вопрос(1)

Решение Вопроса

Вот как запустить команды ssh из командной строки в Linux:http://www.youtube.com/watch?NR=1&Функция = fvwp &v = YLqqdQZHzsU

Для запуска команд в Linux с PHP используйтеExec () команда.

Я надеюсь, что это заставит вас начать смотреть в правильном направлении.

Посмотрите на эти два сообщения для автоматизации запроса пароля

https://serverfault.com/questions/241588/how-to-automate-ssh-login-with-passwordhttps://serverfault.com/questions/187036/execute-ssh-command-without-password

Вот быстрый пример снерабочий код, чтобы заставить вас задуматься:

<!--?php

    $server = "serverB.example.org";
    //ip address will work too i.e. 192.168.254.254 just make sure this is your public ip address not private as is the example

    //specify your username
    $username = "root";

    //select port to use for SSH
    $port = "22";

    //command that will be run on server B
    $command = "uptime";

    //form full command with ssh and command, you will need to use links above for auto authentication help
    $cmd_string = "ssh -p ".$port." ".$username."@".$server." ".$command;

    //this will run the above command on server A (localhost of the php file)
    exec($cmd_string, $output);

    //return the output to the browser
    //This will output the uptime for server B on page on server A
    echo '<pre-->';
    print_r($output);
    echo '
'; ?>

Рекомендуется выполнить команду от сервера A до SSH к серверу B

 amaster11 июн. 2013 г., 21:56
@ Stroes, пожалуйста, смотрите отредактированный ответ с примером, чтобы заставить вас думать в правильном направлении. Это запустит команды ssh напрямую с php на удаленный компьютер и вернет ответ.
 Stroes12 июн. 2013 г., 23:01
Спасибо за ответ, это логичнее !!
 Stroes11 июн. 2013 г., 20:08
спасибо за ссылку, однако я хочу отправлять команды SSH непосредственно с PHP на удаленной машине Linux?
 ShaanSetia18 авг. 2018 г., 12:31
@amaster Я выполнил тот же код в моей лампе, но этоs не возвращает выходной файл. Если я использую ту же команду в моем bash, он выдает результат.

Ваш ответ на вопрос