1

我正在尝试从 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);
        }
    }
    }
    ?>

我得到输出“失败:无法验证”。为什么会这样?有什么解决办法吗?

4

2 回答 2

0

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

pecl 安装 ssh2-0.12

于 2015-02-24T18:14:03.757 回答
0

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

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

如果两者都不起作用,我发布的代码片段将回显日志,这样您就可以看到它所期望的输入类型。如果您可以将这些日志发布在您的回复中,以便这里的人们可以诊断出问题,那就太好了。

谢谢!

于 2013-08-28T14:33:35.353 回答