phpseclib-尝试连接到HP procurve交换机时返回错误:不支持执行SSH命令

phpseclib-尝试连接到HP procurve交换机时返回错误:不支持执行SSH命令,php,ssh,phpseclib,Php,Ssh,Phpseclib,我正在尝试使用phpseclib的NET_SSH2库连接到HP交换机。 为了测试/开始,我正在尝试登录,然后在交换机上运行“show interfaces-brief”命令。 但在它让我登录后,我收到一条错误消息: SSH command execution is not supported. 代码如下: <?php set_include_path(get_include_path() . PATH_SEPARATOR . '../phpseclib'); include('Net

我正在尝试使用phpseclib的NET_SSH2库连接到HP交换机。 为了测试/开始,我正在尝试登录,然后在交换机上运行“show interfaces-brief”命令。 但在它让我登录后,我收到一条错误消息:

 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>';
}
?>
到目前为止我所做的:

  • 我已经通过ssh手动登录,并确保可以运行相同的命令
  • 我已经浏览了交换机的web配置页面,以确保没有其他需要为ssh打开的内容
  • 我一直在检查phpseclib的论坛是否有类似的问题 我使用的是phpseclib的1.532010/10/2401:24:30版本


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

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

    我做了一些东西,基本上是为了拥有一个批处理控制台,以便一次配置多个交换机。我将IP地址列表放在一个名为switches.txt的文件中,用新行分隔每个地址(请确保在文件末尾保留新行)。它非常凌乱,我只使用了一次,没有花太多心思,但它确实节省了我很多时间,而不是手动登录到100多个交换机。我迫不及待地想得到Procurve经理

    另外,我没有花时间正确地实现和读取标准输出,因此您无法看到任何给交换机的输出,但我相信这不会那么困难

    <?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);
    ?>
    
    
    
     function _send_binary_packet($data)
    {
        if (feof($this->fsock)) {
            user_error('Connection closed prematurely', E_USER_NOTICE);
            return false;
        }
    
    <?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);
    ?>