我正在尝试弄清楚如何连接到针对RADIUS服务器进行身份验证的CISCO交换机。这不是工业级别的交换机,而是小型企业的交换机。
我一直在使用phpseclib用于其他交换机,但由于这个特定交换机的工作方式存在一些差异,我正在考虑推出自己的解决方案。
我有以下基本代码:
<?php
echo "attempt connect....<br>";
Try{
$connection = ssh2_connect('10.14.3.45', 22);
var_dump($connection);
echo "attemp ssh2 authorization....<br>";
echo ssh2_auth_password($connection, 'CANNetworkInfra', 'fe8CC+ad4aA9');
exit;
$stream = ssh2_exec($connection, 'show bonjour');
$errorStream = ssh2_fetch_stream($stream, SSH2_STREAM_STDERR);
// Enable blocking for both streams
stream_set_blocking($errorStream, true);
stream_set_blocking($stream, true);
// Whichever of the two below commands is listed first will receive its appropriate output. The second command receives nothing
echo "Output: " . stream_get_contents($stream);
echo "Error: " . stream_get_contents($errorStream);
// Close the streams
fclose($errorStream);
fclose($stream);
}
catch (Exception $ex)
{
echo 'doing a var dump:';
var_dump($connection);
}
此代码即将消失,并显示以下错误消息:
警告:ssh2_auth_password()[function.ssh2-auth-password]:第10行/var/www/test/customssh.php中使用密码的用户名验证失败
我认为问题与交换机总是在寻找一个公钥的事实有关 - 我们没有使用它,因为我们想要对radius服务器进行身份验证。 手动连接时似乎发生了什么:
我们还没有找到对交换机上的publickeys禁用此检查的方法。 所以我的问题是,有没有办法通过ssh2_auth_password()两次发送用户名,这样我们可以模拟我们手动连接的内容?
感谢。
答案 0 :(得分:0)
经过一些研究,这是我们问题的解决方案。其他人可能以不同的方式解决了,但这似乎对我们有用。
我们注意到以下关于这一特定系列的CISCO交换机(SF300)
像phpseclib这样的流行ssh库在这个交换机上失败了。
php的ssh2_auth_none函数在此开关上返回TRUE。
这是什么意思?
似乎ssh协议有一个名为“none”的身份验证方法。这是不安全的,通常在大多数交换机上禁用。 ssh2_auth_none()函数尝试在没有任何身份验证的情况下进行连接,如果失败,则返回服务器接受的身份验证方法列表。对于SF300 ..它通过并且不返回任何用于认证方法的内容。
尽管他们无法为我们提供解决方案,但CISCO技术支持确实明确指出小型企业级交换机具有有限的CLI和简化的SSH版本,因此您无法将其视为企业级别具有完整的ssh实现的开关。
如果它有帮助,这里有一小段代码,展示如何连接到这些类型的设备:
“; fwrite($ stdio_stream,“show bonjour”.PHP_EOL); //您可以使用\ n而不是PHP_EOL,但建议使用PHP_EOL。 睡眠(1); 回声“结果:”。 stream_get_contents($ stdio_stream); ?&GT;希望这有助于任何试图以编程方式连接到这些类型设备的人。