【问题标题】:phpseclib - attempting to connect to an HP procurve switch returns error: SSH command execution is not supportedphpseclib - 尝试连接到 HP procurve 交换机返回错误:不支持 SSH 命令执行
【发布时间】:2013-01-13 00:52:22
【问题描述】:

我正在尝试使用 phpseclib 的 NET_SSH2 库连接到 HP 交换机。 只是为了测试/开始,我正在尝试登录,然后在交换机上运行“显示接口简要”命令。 但是在我登录后,我收到一条错误消息:

 SSH command execution is not supported. 

代码如下:

<?php
set_include_path(get_include_path() . PATH_SEPARATOR . '../phpseclib');
include('Net/SSH2.php');
define('NET_SSH2_LOGGING', true); //turn on logging.

$ssh = new Net_SSH2('10.10.10.10'); //starting the ssh connection to localhost
if (!$ssh->login('', 'password')) { //if you can't log on...
  exit('Login Failed');
}
else  {
echo 'logged in<br>';
}
echo 'Attempting command: <br>';
$output = $ssh->exec('show interfaces brief');    
echo $output.'<br>';
echo 'Error message is: <br>';
$log = $ssh->getLog(NET_SSH2_LOG_COMPLEX);
foreach ($log as $logitem)  {
echo $logitem.'<br>';
}
?>

返回的输出是:

 logged in
 Attempting command:

 Notice: Connection closed prematurely in /var/www/phpseclib/Net/SSH2.php on line 1941
 SSH command execution is not supported.
 Error message is:
 <-
 ->
 <- NET_SSH2_MSG_KEXINIT (0.0015s)
 -> NET_SSH2_MSG_KEXINIT (0s)
 -> NET_SSH2_MSG_KEXDH_INIT (0s)
 <- NET_SSH2_MSG_KEXDH_REPLY (0.5123s)
 -> NET_SSH2_MSG_NEWKEYS (0s)
 <- NET_SSH2_MSG_NEWKEYS (0s)
 -> NET_SSH2_MSG_SERVICE_REQUEST (0s)
 <- NET_SSH2_MSG_SERVICE_ACCEPT (0.1962s)
 -> NET_SSH2_MSG_USERAUTH_REQUEST (0.0001s)
 <- NET_SSH2_MSG_USERAUTH_BANNER (0.0014s)
 <- NET_SSH2_MSG_USERAUTH_SUCCESS (0.0392s)
 -> NET_SSH2_MSG_CHANNEL_OPEN (0s)
 <- NET_SSH2_MSG_CHANNEL_OPEN_CONFIRMATION (0.0204s)
 -> NET_SSH2_MSG_CHANNEL_REQUEST (0s)
 <- NET_SSH2_MSG_CHANNEL_SUCCESS (0.1011s)
 <- NET_SSH2_MSG_CHANNEL_DATA (0s)
 -> NET_SSH2_MSG_CHANNEL_DATA (0s)
 <- NET_SSH2_MSG_CHANNEL_EOF (0s)
 <- NET_SSH2_MSG_CHANNEL_REQUEST (0s)
 <- NET_SSH2_MSG_CHANNEL_CLOSE (0s)

 Notice: Connection closed prematurely in /var/www/phpseclib/Net/SSH2.php on line 1941

ssh2.php 中的第 1941 行是您在下面看到的“user_error”行:

 function _send_binary_packet($data)
{
    if (feof($this->fsock)) {
        user_error('Connection closed prematurely', E_USER_NOTICE);
        return false;
    }

到目前为止我做了什么:

  1. 我已通过 ssh 手动登录,并确保我可以运行相同的命令。
  2. 我已经浏览了交换机的 web 配置页面,以确保我不需要为 ssh 打开其他任何东西。
  3. 我一直在查看 phpseclib 的论坛是否有任何类似问题。

我正在使用 phpseclib 的 1.53 2010/10/24 01:24:30 版本。

任何帮助将不胜感激。谢谢。

【问题讨论】:

    标签: php ssh phpseclib


    【解决方案1】:

    您无法在 HP Procurve 交换机上使用 exec 命令。您必须模拟一个交互式外壳(不幸的是)。

    这是我为了基本上拥有一个批处理控制台以便一次配置多个交换机而制作的。我将 IP 地址列表放在一个名为 switch.txt 的文件中,用新行分隔每个地址(确保在文件末尾也保留一个新行)。很乱,我也只用过一次,也没多想,但确实省了很多时间,而不是手动登录上百台交换机。我等不及要获得 Procurve Manager...

    另外,我没有花时间正确实施和读取 STDOUT,因此您看不到任何输出给开关,但我相信这不会那么困难。

    <?php
    
    require ('Net/SSH2.php');
    $cnt = 0;
    $ssh = array();
    $ips = array();
    echo "\n";
    
    $handle = fopen('switches.txt', 'r');
    while (!feof($handle)) {
        $ip = trim(fgets($handle)); 
        $ips[$cnt] = $ip;
    
        //SSH Setup
    
        $ssh[$cnt] = new Net_SSH2($ip);
        echo "Logging into device: ".$ip."\n";
        if (!$ssh[$cnt]->login('USERNAMEHERE', 'PASSWORDHERE')) {
            exit ('Login Failed');
        }
        $cnt++;
    
    }
    fclose($handle);
    
    //Initial Post Login Setup
    sleep(1);
    for ($i=0; $i<sizeof($ssh); $i++) {
    echo "Performing Post Login Setup (1/2) on device: ".$ips[$i]."\n";
    $ssh[$i]->write("\n");
    }
    sleep(1);
    for ($i=0; $i<sizeof($ssh); $i++) {
    echo "Performing Post Login Setup (2/2) on device: ".$ips[$i]."\n";
    $ssh[$i]->write("conf\n");
    }
    sleep(1);
    
    
    //Command Loop
    while (true) {
        //Device Loop
        echo "\nBatch Input# ";
        $in = fopen('php://stdin', 'r');
        $buffer = fgets($in);
        for ($i=0; $i<sizeof($ssh); $i++) {
            $ssh[$i]->write($buffer);
            //echo "Wrinting command: $buffer  ;  To Device: ".$ips[$i].";\n";
        }   
    }
    fclose($handle);
    ?>
    

    【讨论】:

      猜你喜欢
      • 2013-06-27
      • 2021-04-19
      • 2012-09-25
      • 1970-01-01
      • 1970-01-01
      • 2018-11-22
      • 2014-09-02
      • 1970-01-01
      • 2019-08-31
      相关资源
      最近更新 更多