ssh2 не работи за suse

Опитвам се да направя ssh от RHEL към SLES машина. Използвам PHP функцията ssh2, за да постигна това. Удостоверяването не се извършва дори след подаване на правилно потребителско име и парола. Но същият код работи добре за RHEL->RHEL. Мога да се свържа с ssh към SLES машината от 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);
        }
    }
    }
    ?>

Получавам резултата „fail:unable to authenticate“. Защо се получава така? Някакво решение за това?


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


Отговори (2)


Възможно е сървърът да използва интерактивно удостоверяване с клавиатура, а не удостоверяване с парола.

Наистина, libssh2 не предоставя никакъв добър начин човек да разбере това. Моята препоръка: опитайте phpseclib, чисто изпълнение на PHP SSH2. напр.

<?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