ssh2不适用于suse

时间:2013-08-28 10:10:57

标签: php rhel suse libssh2

我正在尝试从RHEL ssh到SLES机器。我正在使用PHP函数ssh2来实现这一点。即使在传递正确的用户名和密码后,也不会进行身份验证。但是相同的代码适用于RHEL-> RHEL。我能够从RHEL终端ssh到SLES机器。但是使用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);
        }
    }
    }
    ?>

我收到输出“失败:无法验证”。为什么会这样?任何解决方案吗?

2 个答案:

答案 0 :(得分:0)

服务器可能正在使用键盘交互式身份验证而非密码身份验证。

实际上,libssh2没有为人们提供任何好的方法。我的建议:试试phpseclib, a pure PHP SSH2 implementation。例如

<?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不同)如果密码验证失败,它将尝试键盘交互。

如果两个都没有工作,我发布的代码片段将回显日志,这样你就可以看到它所期望的输入类型。如果您可以将这些日志发布到您的回复中,那么这些日志就会被发布,以便此处的人员可以诊断出这个问题。

谢谢!

答案 1 :(得分:0)

使用YAST安装libssh2-devel然后执行

pecl install ssh2-0.12