phpseclib - 尝试连接到 HP procurve 交换机返回错误:不支持 SSH 命令执行 [英] phpseclib - attempting to connect to an HP procurve switch returns error: SSH command execution is not supported

查看:56
本文介绍了phpseclib - 尝试连接到 HP procurve 交换机返回错误:不支持 SSH 命令执行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

i'm trying to use phpseclib's NET_SSH2 library to connect to an HP switch. just to test / get started, i'm trying to log on, and then run a 'show interfaces brief' command on the switch. But after it logs me on, i get an error message :

 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"行:

Line 1941 in ssh2.php is the "user_error" line you see below:

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

到目前为止我所做的:

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

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

I'm using version 1.53 2010/10/24 01:24:30 of the phpseclib.

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

Any help would be appreciated. Thanks.

推荐答案

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

You aren't able to use the exec command on HP Procurve Switches. You have to emulate an interactive shell (unfortunately).

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

Here is something I've made in order to basically have a batch console in order to configure more than one switch at a time. I'd put a list of IP addresses in a file called switches.txt, separating each address with a new line (be sure to leave a new line at the end of the file as well). It's very messy, and I only used it once and didn't put much thought into it, but it did save me a lot of time instead of manually logging into over a hundred switches. I can't wait until I get Procurve Manager...

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

Also, I didn't take the time to properly implement and STDOUT reading, so you cannot see any output given to the switch, but I'm sure it wouldn't be that difficult.

<?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);
?>

这篇关于phpseclib - 尝试连接到 HP procurve 交换机返回错误:不支持 SSH 命令执行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆