【问题标题】:php ss2_connect() - connect to a switch with RADIUS serverphp ss2_connect() - 使用 RADIUS 服务器连接到交换机
【发布时间】:2012-11-12 19:49:06
【问题描述】:

我试图弄清楚如何连接到针对 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. 在我们提供正确的密码后,它就会连接。

我们还没有找到方法来禁用交换机上的公钥检查。 所以我的问题是,有没有办法通过 ssh2_auth_password() 发送用户名两次,这样我们就可以模拟我们手动连接的操作?

谢谢。

【问题讨论】:

    标签: php ssh


    【解决方案1】:

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

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

    1. 由于 ssh 实现有限,流行的 ssh 库(如 phpseclib)在此开关上失败。

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

    这是什么意思?

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

    1. 已知的 CLI 和 SSH 限制

    虽然他们无法为我们提供解决方案,但 CISCO 技术支持确实明确指出,小型企业级交换机具有有限的 CLI 和精简版 SSH,因此您不能将其视为企业级交换机具有完整 ssh 实现的交换机。

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

    '; fwrite($stdio_stream, "show bonjour".PHP_EOL); //您可以使用 \n 代替 PHP_EOL,但建议使用 PHP_EOL。 睡眠(1); 回声“
    结果:”。 stream_get_contents($stdio_stream); ?>

    希望这对尝试以编程方式连接到这些类型的设备的人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-06
      • 2011-10-19
      • 2018-10-27
      • 1970-01-01
      • 1970-01-01
      • 2015-02-12
      相关资源
      最近更新 更多