Я пытаюсь использовать 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();
Он всегда умирает с сообщением об ошибке Login Failed.
Я попытался добавить некоторые операторы отладки в саму библиотеку NET_SSH2, и она умерла с ошибкой номер 51, которая определяется как «NET_SSH2_MSG_USERAUTH_FAILURE».
Одна вещь, которая отличается между коммутаторами hp и этой cisco, заключается в том, что при ручном подключении hp достаточно «умна», чтобы подобрать имя пользователя из начальной команды ssh. Например, если вы должны были сделать это в командной строке:
ssh [email protected]
а затем нажмите 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>';
}
Это возвращает следующий вывод:
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)
Таким образом, он связывается с коммутатором, но, как было упомянуто в моем первоначальном сообщении, он терпит неудачу при попытке аутентификации имени пользователя/пароля.