ssh2 не работает для suse

Я пытаюсь ssh с RHEL на машину SLES. Для этого я использую функцию PHP ssh2. Аутентификация не происходит даже после ввода правильного имени пользователя и пароля. Но тот же код отлично работает для RHEL->RHEL. Я могу подключиться к машине SLES по ssh с терминала RHEL. Но с использованием ssh2 этого не происходит.

    <?php
if (!function_exists("ssh2_connect")) die("function ssh2_connect doesn't exist");
// log in at ip on port 22
if(!($con = ssh2_connect(ip, 22))){
    echo "fail: unable to establish connection\n";
} else {
    // try to authenticate with username root, password password
    if(!ssh2_auth_password($con, "root", "password")) {
        echo "fail: unable to authenticate\n";
    } else {
        // allright, we're in!
        echo "okay: logged in...\n";

        // execute a command
        if (!($stream = ssh2_exec($con, 'date' ))) {
            echo "fail: unable to execute command\n";
        } else {
            // collect returning data from command
        //echo "in else";
            stream_set_blocking($stream, true);
            $data = "";
            while ($buf = fread($stream,4096)) {
                $data .= $buf;
            }
        echo $data;
            fclose($stream);
        }
    }
    }
    ?>

Я получаю вывод «сбой: невозможно пройти аутентификацию». Почему это происходит именно так? Любое решение?


person Akshatha    schedule 28.08.2013    source источник


Ответы (2)


Возможно, сервер использует аутентификацию с интерактивной клавиатурой, а не аутентификацию по паролю.

Действительно, libssh2 не дает хорошего способа узнать это. Моя рекомендация: попробуйте phpseclib, реализацию SSH2 на чистом PHP. например.

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

define('NET_SSH2_LOGGING', NET_SSH2_LOG_COMPLEX);

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

echo $ssh->exec('pwd');
echo $ssh->exec('ls -la');
?>

По умолчанию метод $ssh->login() попытается пройти аутентификацию по паролю, но (и в отличие от libssh2) он попытается использовать интерактивную клавиатуру, если аутентификация по паролю не удалась.

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

Спасибо!

person neubert    schedule 28.08.2013
comment
Это работает! :) Но я все еще не мог понять, почему ssh2 не работает для RHEL-›SLES. В любом случае, спасибо :) - person Akshatha; 30.08.2013

установите libssh2-devel с помощью YAST, затем выполните

pecl установить ssh2-0.12

person David Lefkon    schedule 24.02.2015