phpseclib – попытка подключения к коммутатору HP procurve возвращает ошибку: выполнение команды SSH не поддерживается

Я пытаюсь использовать библиотеку NET_SSH2 от phpseclib для подключения к коммутатору 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>'; } ?> в <?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 

Строка 1941 в ssh2.php – это строка «user_error», которую вы видите ниже:

  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 для любых подобных проблем.

Я использую версию phpeclib версии 1.53 2010/10/24 01:24:30.

Любая помощь будет оценена по достоинству. Благодарю.

Вы не можете использовать команду exec на коммутаторах HP Procurve. Вы должны подражать интерактивной оболочке (к сожалению).

Вот что я сделал для того, чтобы в основном иметь пакетную консоль для настройки более чем одного коммутатора за раз. Я бы поместил список IP-адресов в файл с именем switch.txt, разделив каждый адрес на новую строку (обязательно оставите новую строку в конце файла). Это очень грязно, и я использовал его только один раз и не задумывался о нем, но это помогло мне много времени, вместо того, чтобы вручную войти в более ста коммутаторов. Я не могу дождаться, пока я получу Менеджер Procurve …

Кроме того, я не нашел времени для правильного выполнения и чтения 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); ?>