【问题标题】:Issues authenticating with php's ssh2使用 php 的 ssh2 进行身份验证的问题
【发布时间】:2013-06-21 09:17:34
【问题描述】:

我正在尝试使用 PHP 的 SSH2 在脚本运行时打开我的两台服务器之间的 SSH 连接,并使用来自 http://kvz.io/blog/2007/07/24/make-ssh-connections-with-php/ 的信息到达某个地方。也就是说,使用以下代码,我一直无法进行身份验证。似乎两台服务器正在通信,但根本没有进行身份验证,因为我收到“失败:无法验证”消息。我可以使用相同的信息直接使用 Web 服务器的终端轻松连接。出于显而易见的原因,值是通用的。如果这意味着什么,SSH 服务器是一台运行 Mountain Lion(它运行 OS X 虚拟机)的 Mac,而 Web 服务器运行的是 Ubuntu 12.04。

<?php
if (!function_exists("ssh2_connect")) die("function ssh2_connect doesn't exist");
if(!($con = ssh2_connect('192.168.0.1', 22))){
    echo "fail: unable to establish connection\n";
} else {
    if(!ssh2_auth_password($con, 'myusername', 'mysecretpassword')) {
        echo "fail: unable to authenticate\n";
    } else {
        echo "okay: logged in...\n";

        // execute a command
        if (!($stream = ssh2_exec($con, "mysshcommand" ))) {
            echo "fail: unable to execute command\n";
        } else {

            stream_set_blocking($stream, true);
            $data = "";
            while ($buf = fread($stream,4096)) {
                $data .= $buf;
            }
            fclose($stream);
        }
    }
}
?>

【问题讨论】:

    标签: php apache ubuntu ssh osx-mountain-lion


    【解决方案1】:

    我不能肯定地说,但您连接的服务器可能正在使用键盘交互式身份验证而不是密码身份验证。使用像 PuTTY 这样的客户端,它们看起来是一样的,但实际上它们并非如此。

    我的建议是使用phpseclib, a pure PHP SSH2 implementation。例如。

    <?php
    include('Net/SSH2.php');
    
    $ssh = new Net_SSH2('www.domain.tld');
    if (!$ssh->login('username', 'password')) {
        exit('Login Failed');
    }
    
    echo $ssh->exec('pwd');
    echo $ssh->exec('ls -la');
    ?>
    

    它会首先尝试密码验证,如果失败,它会尝试键盘交互。如果即使失败了,您也可以使用 phpseclib 获取日志,以查看它在做什么。如果有必要,我会引导你完成。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-05
      • 1970-01-01
      • 1970-01-01
      • 2014-08-22
      • 2018-07-26
      • 2011-04-25
      • 2018-06-30
      相关资源
      最近更新 更多