我正在尝试从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);
}
}
}
?>
我收到输出“失败:无法验证”。为什么会这样?任何解决方案吗?
答案 0 :(得分: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不同)如果密码验证失败,它将尝试键盘交互。
如果两个都没有工作,我发布的代码片段将回显日志,这样你就可以看到它所期望的输入类型。如果您可以将这些日志发布到您的回复中,那么这些日志就会被发布,以便此处的人员可以诊断出这个问题。
谢谢!
答案 1 :(得分:0)
使用YAST安装libssh2-devel然后执行
pecl install ssh2-0.12