2013-09-17 4 views
1

Я новичок в среде инструмента автоматизации сервера Linux-SA. Я пытаюсь проверить подлинность sshpass следующим образом:возвращает пустую строку с использованием аутентификации sshpass

В Linux среды, я использую следующий код в терминале и список файлов, правильно:

sshpass -p Password ssh -o StrictHostKeyChecking=no [email protected] "ls /root" 

Но если я пытаюсь получить результат с PHP следующим образом, он возвращает пустую строку:

shell_exec('sshpass -p Password ssh -o StrictHostKeyChecking=no [email protected] "ls /root"'); 
+0

Если вы не можете понять это, вы можете попробовать http://phpseclib.sourceforge.net/. sshpass делает пароль auth интерактивным с клавиатуры без предоставления пользователю фактических подсказок. phpseclib делает это тоже. Подробнее см. Примеры. Удачи! – neubert

ответ

0

Вы вызываете PHP на веб-страницу?

sshpass на пути? как насчет использования полного пути?

например.

shell_exec('/usr/local/bin/sshpass -p Password ssh -o StrictHostKeyChecking=no [email protected] "ls /root"'); 

* Вы должны работать, где ваш sshpass является

также, вы можете исследовать ключи SSH вместо того, чтобы пароли, как это в вашем коде - это может быть проблема безопасности .. (на самом деле я не знаю, что вы делаете, вы sshing на localhost, но, может быть, вы просто тестируете?)

+0

Спасибо Jon Soong, Да, мы тестируем, но нам нужно проверить правильность введенного пароля или нет, еще одна вещь, мне нужно получить доступ к небольшому файлу, который находится в корневой файловой системе из нашего приложения. примечание: наше приложение имеет отдельную файловую систему под root. –

0

Пожалуйста, возьмите вывод команды выше в некоторой переменной и отобразите эту переменную. например:

$ выход = shell_exec ('sshpass -p Пароль SSH -o StrictHostKeyChecking = нет корень @ локальный "LS/корень"');

эхо $ выход

Это определенно покажет вам результат.

0

Это вопрос разрешения между пользователем sshpass и apache (www-data в моем случае).

Включите эту линию на sudoers (/ и т.д./sudoers)

www-data ALL=(ALL) NOPASSWD: /usr/bin/sshpass -> изменение в sshpass место в вашей системе и пользователь Apache.

и включают «Суда» перед sshpass

shell_exec('sudo /usr/local/bin/sshpass -p Password ssh -o StrictHostKeyChecking=no [email protected] "ls /root"'); 
0

Если вы подключаетесь к этому серверу через SSH первый раз, что вам нужно сделать это один раз руководство. Таким образом, ключ RSA был добавлен к известным хостам. Похожая проблема. И это помогает.

0

Использование exec(). Имейте в виду, что если ssh терпит неудачу, и вы можете ожидать его сообщение об ошибке в php, ssh печатает это на stderr, php получает только stdout, и это пусто. Просто перенаправьте stderr на stdout, добавив 2>&1 в конец команды. Как указано в manpage of sshpass, Вопросы безопасности следует понимать при использовании опции -p.

$ssh_host = "localhost"; 
$ssh_port = "22"; 
$ssh_user = "root"; 
$ssh_pass = "Password"; 
$command = "ls /root"; 
$connection = "/usr/bin/sshpass -p $ssh_pass /usr/bin/ssh -p $ssh_port -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null [email protected]$ssh_host"; 
$output = exec($connection." ".$command." 2>&1"); 
echo "Output: $output"; 
Смежные вопросы