Intereting Posts
Опубликовать многомерный массив с использованием CURL и получить результат на сервере Расширение загрузки php force Ajax: запрос CROS-DOMAIN не устанавливает файлы cookie с помощью Safari IOS с использованием PHP Иерархическое хранилище MySQL: поиск по всем родителям / бабушкам и т. Д. узлам задан идентификатор дочернего узла? Как просмотреть значение длинных строк с помощью NetBeans и x-debug? Класс не найден в одном файле показать контент на основе зарегистрированного пользователя user = role в wordpress с помощью PHP Перезагрузите содержимое div afer регулярного промежутка времени WordPress Загрузка дополнительных сообщений onclick с ajax request jquery Symfony 2 – форма для каждого экземпляра объекта mpdf игнорирует javascript cookie против сеансов для приложения php Вставка данных в mysqli не работает Загрузка файла конфигурации .user.ini PHP с использованием внутреннего сервера PHP 5.4? Как скрыть / показать разделы HTML-формы

phpseclib – невозможно подключиться к коммутатору cisco

Я пытаюсь использовать phpseclib для подключения к коммутатору cisco SF308. Я использую эту библиотеку для успешного подключения к некоторым коммутаторам HP, но по какой-то причине она просто не будет работать с моим cisco. Вот код:

set_include_path(get_include_path() . PATH_SEPARATOR . '/var/www/phpseclib'); include('/var/www/phpseclib/Net/SSH2.php'); define('NET_SSH2_LOGGING', NET_SSH2_LOG_COMPLEX); //add near include lines $cisco = new Net_SSH2('10.10.10.10'); if (!$cisco->login('username', 'password')) { exit('Login Failed'); } echo $cisco->write('\n'); echo $cisco->write('help'); echo $cisco->read('/([0-9A-Z\-])*(#)(\s*)/i', NET_SSH2_READ_REGEX); echo $cisco->data; echo $cisco->getLog(); echo $cisco->disconnect(); 

Он всегда умирает с сообщением об ошибке входа в систему.

Я попытался добавить некоторые отладочные заявления в библиотеке NET_SSH2 и его умирании с номером ошибки 51, который определяется как «NET_SSH2_MSG_USERAUTH_FAILURE».

Единственное отличие между hp-переключателями и этим cisco заключается в том, что при подключении вручную hp достаточно «умный», чтобы забрать имя пользователя из начальной команды ssh. Например, если вы должны сделать это в командной строке:

  ssh username@10.10.10.10 

а затем нажмите enter, он подберет «имя пользователя» в качестве имени пользователя и будет запрашивать только пароль. С помощью переключателя cisco (модель SF302-08) все еще запрашивается как имя пользователя, так и пароль. Как только я поставлю имя пользователя во второй раз, а затем пароль, я могу подключиться к коммутатору.

Я не уверен, что это то, что вызывает проблему, но это то, что явно отличается между двумя коммутаторами. Я пытаюсь найти документацию для cisco, чтобы узнать, есть ли способ изменить это / заставить его выбрать имя пользователя в первоначальном запросе на соединение. Но если у вас есть другие предложения, пожалуйста, дайте мне знать! Я весь во внимании.

Благодарю.

ИЗМЕНИТЬ 1

Я включил сложную регистрацию и получил полную информацию о том, где она терпит неудачу, на случай, если это поможет. Вот мой последний код:

  set_include_path(get_include_path() . PATH_SEPARATOR . '/var/www/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('username', 'password')) { //if you can't log on... echo('Login Failed'); echo 'Error message is: <br>'; $log = $ssh->getLog(NET_SSH2_LOG_COMPLEX); foreach ($log as $logitem) { echo $logitem.'<br>'; } в  set_include_path(get_include_path() . PATH_SEPARATOR . '/var/www/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('username', 'password')) { //if you can't log on... echo('Login Failed'); echo 'Error message is: <br>'; $log = $ssh->getLog(NET_SSH2_LOG_COMPLEX); foreach ($log as $logitem) { echo $logitem.'<br>'; } 

Это возвращает следующий результат:

  Login FailedError message is: <- -> <- NET_SSH2_MSG_KEXINIT (0.0118s) -> NET_SSH2_MSG_KEXINIT (0s) -> NET_SSH2_MSG_KEXDH_INIT (0s) <- NET_SSH2_MSG_KEXDH_REPLY (0.7912s) -> NET_SSH2_MSG_NEWKEYS (0s) <- NET_SSH2_MSG_NEWKEYS (0s) -> NET_SSH2_MSG_SERVICE_REQUEST (0s) <- NET_SSH2_MSG_SERVICE_ACCEPT (0.4927s) -> NET_SSH2_MSG_USERAUTH_REQUEST (0s) <- NET_SSH2_MSG_USERAUTH_FAILURE (0.0059s) 

Поэтому он обращается к коммутатору, но, как упоминалось в моем первоначальном сообщении, он не работает, пытаясь аутентифицировать имя пользователя / пароль.

Я не знаком с библиотекой, которую вы используете, но мне пришлось записывать некоторые вещи с маршрутизаторами Cisco, используя Perl. Для этого я использовал модуль Net :: Telnet :: Cisco, который имеет дело с некоторыми особенностями взаимодействия с устройством Cisco. Когда я подключился к устройству Cisco Nexus, скорее, это обычное устройство IOS, это сломалось. Я должен был исправить это, изменив регулярное выражение, используемое модулем для распознавания строк, которые указывают, что сеанс telnet ожидает ввода пользователем. Я смог видеть, что точные строки отправляются как с устройства IOS, так и с устройства Nexus с использованием Wireshark. Я подозреваю, что вам нужно что-то подобное.

После некоторых исследований, вот решение нашей проблемы. Другие, возможно, решили по-другому, но это, похоже, работает для нас.

Мы заметили следующее:

  1. популярные ssh-библиотеки, такие как phpseclib, терпели неудачу на этом коммутаторе из-за ограниченной реализации ssh.

  2. Функция ssh2_auth_none php возвращает TRUE на этом коммутаторе.

Что это значит?

Похоже, что протокол ssh имеет метод аутентификации, называемый «none». Это небезопасно и обычно отключается на большинстве коммутаторов. Функция ssh2_auth_none () пытается подключиться без какой-либо проверки подлинности, и если она терпит неудачу, она возвращает список методов проверки подлинности, которые принимает сервер. В случае SF300 .. он передает и ничего не возвращает для методов аутентификации.

  1. Известные ограничения CLI и SSH

Хотя они не смогли дать нам решение, техническая поддержка CISCO явно заявила, что коммутаторы класса малого бизнеса имеют ограниченный CLI и упрощенную версию SSH, так что вы не можете рассматривать ее как коммутатор уровня предприятия, который имеет полномасштабная реализация ssh.

В случае, если это помогает, вот небольшой фрагмент кода, который показывает, как подключиться к этим типам устройств:

  <?php $username = 'myusername'; $password = 'mypassword'; $connection = ssh2_connect('123.123.123.123', 22); //$authentication_methods = ssh2_auth_none($connection, 'user'); $stdio_stream = ssh2_shell($connection); fwrite($stdio_stream,$username."\n"); sleep(1); fwrite($stdio_stream,$password."\n"); sleep(1); echo "Results: " . stream_get_contents($stdio_stream); echo 'sending show bonjour command:<br>'; fwrite($stdio_stream, "show bonjour".PHP_EOL); //you can use \n instead of PHP_EOL but PHP_EOL is recommended. sleep(1); echo "<br>Results: " . stream_get_contents($stdio_stream); ?> 

Надеюсь, это поможет любому, кто пытается подключиться к этим типам устройств программным путем.

Я бы проверил правильный IP-адрес, который вы используете, и проверьте, что имя пользователя и пароль имеют разрешение на подключение.