php ss2_connect() - 使用RADIUS服务器连接到交换机

时间:2012-11-12 19:49:06

标签: php ssh

我正在尝试弄清楚如何连接到针对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服务器进行身份验证。 手动连接时似乎发生了什么:

  1. 我们在终端窗口中运行以下命令:“ssh username @ ipaddress”
  2. 交换机检查/home/username/.ssh/id_rsa默认文件夹中的公钥
  3. 它找不到文件,然后交换机提示我们输入用户名。我们再次输入。
  4. 然后提示输入密码。
  5. 在我们提供正确的密码后,它会连接。
  6. 我们还没有找到对交换机上的publickeys禁用此检查的方法。 所以我的问题是,有没有办法通过ssh2_auth_password()两次发送用户名,这样我们可以模拟我们手动连接的内容?

    感谢。

1 个答案:

答案 0 :(得分:0)

经过一些研究,这是我们问题的解决方案。其他人可能以不同的方式解决了,但这似乎对我们有用。

我们注意到以下关于这一特定系列的CISCO交换机(SF300)

    由于ssh实现有限,
  1. 像phpseclib这样的流行ssh库在这个交换机上失败了。

  2. php的ssh2_auth_none函数在此开关上返回TRUE。

  3. 这是什么意思?

    似乎ssh协议有一个名为“none”的身份验证方法。这是不安全的,通常在大多数交换机上禁用。 ssh2_auth_none()函数尝试在没有任何身份验证的情况下进行连接,如果失败,则返回服务器接受的身份验证方法列表。对于SF300 ..它通过并且不返回任何用于认证方法的内容。

    1. 已知的CLI和SSH限制
    2. 尽管他们无法为我们提供解决方案,但CISCO技术支持确实明确指出小型企业级交换机具有有限的CLI和简化的SSH版本,因此您无法将其视为企业级别具有完整的ssh实现的开关。

      如果它有帮助,这里有一小段代码,展示如何连接到这些类型的设备:

      “;          fwrite($ stdio_stream,“show bonjour”.PHP_EOL); //您可以使用\ n而不是PHP_EOL,但建议使用PHP_EOL。          睡眠(1);          回声“结果:”。 stream_get_contents($ stdio_stream); ?&GT;

      希望这有助于任何试图以编程方式连接到这些类型设备的人。