Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用php进行身份验证的问题';s ssh2_Php_Apache_Ubuntu_Ssh_Osx Mountain Lion - Fatal编程技术网

使用php进行身份验证的问题';s ssh2

使用php进行身份验证的问题';s ssh2,php,apache,ubuntu,ssh,osx-mountain-lion,Php,Apache,Ubuntu,Ssh,Osx Mountain Lion,我试图在脚本运行时使用PHP的SSH2打开两台服务器之间的SSH连接,并使用来自的信息找到了一些地方。也就是说,使用下面的代码,我一直无法进行身份验证。这两台服务器似乎在通信,但根本没有进行身份验证,因为我收到了“fail:cannotauthenticate”消息。我可以使用相同的信息直接使用web服务器的终端轻松连接。由于明显的原因,这些值是通用的。如果这意味着什么的话,SSH服务器是一个运行Mountain Lion的Mac(它运行OS X虚拟机),web服务器运行Ubuntu 12.04

我试图在脚本运行时使用PHP的SSH2打开两台服务器之间的SSH连接,并使用来自的信息找到了一些地方。也就是说,使用下面的代码,我一直无法进行身份验证。这两台服务器似乎在通信,但根本没有进行身份验证,因为我收到了“fail:cannotauthenticate”消息。我可以使用相同的信息直接使用web服务器的终端轻松连接。由于明显的原因,这些值是通用的。如果这意味着什么的话,SSH服务器是一个运行Mountain Lion的Mac(它运行OS X虚拟机),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);
        }
    }
}
?>

我不能确定,但您连接的服务器可能使用的是键盘交互式身份验证,而不是密码身份验证。使用PuTTY这样的客户,他们看起来会一样,但事实上他们不是

我的建议是使用。例如


它将首先尝试密码验证,如果失败,它将尝试键盘交互。即使失败,您也可以使用phpseclib获取日志,查看它在做什么。如果有必要的话,我会带你过去的

<?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');
?>