Соединение PHP shell exec ssh


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

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

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

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

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

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

<?php
shell_exec('ssh [email protected] ./StartTest.sh');

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

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

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

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

Author: hakre, 2011-10-12

3 answers

Встроенной поддержки 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');
?>
 9
Author: nigol, 2011-10-13 03:34:23

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

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

shell_exec('/path/to/ssh [email protected] /home/yourdirectory/scripts/StartTest.sh');

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

 2
Author: George Cummins, 2013-05-16 19:25:18

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

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

Ssh -o Файл UserKnownHostsFile=/dev/null -o Строгая проверка данных=нет -o Уровень журнала=тихо

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

 2
Author: onalbi, 2015-03-05 10:07:04