PHP shell_exec ssh соединение - PullRequest
       35

PHP shell_exec ssh соединение

5 голосов
/ 12 октября 2011

Я знаю, что этот вопрос задавался ранее по-разному, но я все еще ломаю голову над тем, почему я не могу заставить это работать.

Во-первых, у меня настроены два сервера SLES, этоСервер A и сервер B, работающие в небольшой частной сети, доступ к которой имеет только специальная группа.

Сервер A настроен как веб-сервер, на котором работают Apache, PHP, MYSQL и ssh, каждый из которыхвыполняются без проблем.

Сервер B используется для выполнения второстепенных задач с ssh, также установленным и активированным.

Я создал свой ключ rsa на сервере A и установил его на сервере B, который при запуске из командной строки сразу регистрирует меня без запроса пароля.Я повторил этот процесс для обеих учетных записей root и никто на сервере A.

Я добавил эту страницу PHP на сервер A, которая выглядит следующим образом:

<?php
shell_exec('ssh root@192.162.0.5 ./StartTest.sh');

header("Location: archive.php?page=home"); 
?>

Но когда я запускаю ее,не создает мою папку.Если я запускаю это из командной строки, это работает для обоих (я думаю, что оба, я не могу вспомнить, пробовал ли я это сейчас для учетной записи nobody в cli) - root & nobody.Я даже дошел до того, что добавил учетную запись nobody в корневую группу, но все равно не испытывал радости.

Я что-то здесь пропустил.Все, что я хотел бы сделать, это подключиться с сервера A к серверу B через php & ssh, чтобы выполнить одну команду и перенаправить на другую страницу веб-сайта.

Любая помощь будет принята с благодарностью, так как мой запас парацетамолана исходе.

Ответы [ 3 ]

9 голосов
/ 13 октября 2011

Встроенная поддержка SSH, о которой говорит Джордж Камминс, отсутствует.Это расширение PHP, которое не включено по умолчанию.Он должен быть скомпилирован отдельно и, как известно, сложен в настройке / использовании.Я рекомендую использовать phpseclib, чистую реализацию PHP SSH :

<?php
include('Net/SSH2.php');

$ssh = new Net_SSH2('www.domain.tld');
if (!$ssh->login('username', 'password')) {
    exit('Login Failed');
}

echo $ssh->exec('pwd');
echo $ssh->exec('ls -la');
?>
2 голосов
/ 12 октября 2011

Вы сказали: «Я добавил эту страницу PHP», поэтому я предполагаю, что вы выполняете этот скрипт через веб-сервер, а не как отдельный скрипт.

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

shell_exec('/path/to/ssh root@192.162.0.5 /home/yourdirectory/scripts/StartTest.sh');

Вам также необходимо подтвердить, что у пользователя веб-сервера были разрешения на выполнение ssh и сценария StartTest.sh.

1 голос
/ 05 марта 2015

Я знаю, что опоздал с этим ответом, но, возможно, может кому-то помочь:

Чтобы использовать shell_exec и ssh, вам необходимо добавить в качестве параметра ssh эти

ssh -o UserKnownHostsFile = / dev / null -o StrictHostKeyChecking = нет -o LogLevel = quiet

Таким образом, команда не пытается создать папку .ssh, и у вас есть очиститьвывод без лога ssh

...