0

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

1 回答 1

0

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

我的建议是使用phpseclib,一个纯 PHP SSH2 实现。例如。

<?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 获取日志,以查看它在做什么。如果有必要,我会引导你完成。

于 2013-06-25T14:43:44.813 回答