2013-08-28 32 views
1

我想从RHEL ssh到SLES机器。我使用PHP函数ssh2来实现这一点。即使传递正确的用户名和密码,身份验证也不会发生。但是相同的代码对于RHEL-> RHEL工作正常。我可以从RHEL终端ssh到SLES机器。但使用ssh2不会发生。ssh2不适用于suse

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

我得到的输出“失败:无法验证”。为什么会发生这种情况?任何解决方案?

回答

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)如果密码身份验证失败,它会尝试键盘交互。

如果两者都不起作用,我发布的代码片段将回显日志,以便您可以查看它期望的输入类型。如果这些日志是发布的,如果您可以将它们发布在您的回复中,以便这里的人员可以诊断这个问题很好。

谢谢!

+0

这是工作!:)不过我还是想不出弄清楚为什么SSH2不是为RHEL-工作> SLES。不管怎样,谢谢 :) – Akshatha

0

使用YAST安装libssh2-devel的然后做

PECL安装ssh2-0.12