Терминальный сервер Netmiko Connection - PullRequest
1 голос
/ 06 марта 2020

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

Я не эксперт, просто начинающий учиться Python.

мои настройки.

PythonServer - s sh -> Консольный сервер Cisco - обратный t enet -> New_device (cisco)

Я могу успешно подключиться на сервер cisco colse. (простая часть, я могу подключиться, используя device_type как 'cisco_ ios', 'cisco_ios_te lnet', Terminal_server ',' generic_terminal_server '). Все они работают.

, когда я пытаюсь изменить te lnet, мне предлагают только пароль.

************************************************************************
This is a privately owned computing system.  Access permitted only by
authorized employees.
************************************************************************
Password: 

Я не могу пройти через это. вот мой код Что я делаю неправильно? (я предполагаю, что это связано с тем, как netmiko обрабатывает соединения), и может кто-нибудь помочь мне это исправить.

import time
from netmiko import ConnectHandler, redispatch

conserver_username = 'cisco'
conserver_password = 'cisco'
conserver_ip = '10.88.77.152'

console_server = {
    'host': conserver_ip,
    'username': conserver_username,
    'password': conserver_password,
    'device_type': 'cisco_ios',
    'session_log': 'log.out'
}

net_connect = ConnectHandler(**console_server)

net_connect.send_command('\n', expect_string=r'#')
net_connect.send_command('telnet 10.88.77.152 2004', expect_string=r':')
net_connect.send_command_timing('cisco')
#net_connect.send_command_timing('cisco')
net_connect.send_command_timing('\n')

Это подсказывает мне баннер и не продолжается.

Я считаю, модуль ищет имя пользователя и, поскольку он не представлен с именем пользователя, не знает, как его обработать.

1 Ответ

1 голос
/ 13 апреля 2020

может быть 2 проблемы:

  1. , если устройству не требуется пароль при входе в систему (пароль настраивается в VTY-строках). Это будет проблема конфигурации на Cisco ios
  2. Вместо send_command попробуйте write_channel, чтобы установить sh соединение. Возможно, вы захотите попробовать приведенный ниже код, я добавил немного печати, чтобы помочь с отладкой. Кроме того, проверьте файл журнала:
import time
from netmiko import ConnectHandler, redispatch

conserver_username = 'cisco'
conserver_password = 'cisco'
conserver_ip = '10.88.77.152'

console_server = {
    'host': conserver_ip,
    'username': conserver_username,
    'password': conserver_password,
    'device_type': 'cisco_ios',
    'session_log': 'log.out'
}

new_device_username = 'cisco'
new_device_password = 'cisco'

net_connect = ConnectHandler(**console_server)

#to make sure that you are in logged in to the right device:
output = net_connect.find_prompt()
print(output)
# write channel
net_connect.write_channel('telnet 10.88.77.152 2004')
time.sleep(2) # this is needed for the device to send response. Yoiu may adjust timing depending on your end device
output = net_connect.read_channel()
print(output)

#send username:
net_connect.write_channel(new_device_username)
time.sleep(2)
#send password:
net_connect.write_channel(new_device_password)
time.sleep(2)
output = net_connect.read_channel()
print(output)

#see if you are logged in
net_connect.write_channel('\n')
time.sleep(1)
output = net_connect.read_channel()
print(output)
#redispatch when logged in and use as normal:
redispatch(net_connect, device_type='cisco_ios_telnet')
output = net_connect.find_prompt()
print(output)

Примечание: существует метод повторной отправки!

Возможно, вы захотите взглянуть на эту статью о Proxy

...