Улучшение обработки исключений скрипта Netmiko для SSH на устройствах Cicso - PullRequest
0 голосов
/ 29 апреля 2019

Я пытаюсь улучшить обработку исключений сценария netmiko, который успешно выполняет команды на устройствах Cisco, перечисленных в текстовом файле, и сохраняет список тех, которые ожидают тайм-аут соединения, в файл .txt.Когда я вручную подключаюсь к Switch-A, я получаю ошибку «соединение закрыто».Попытка ручного переключения Switch-B приводит к ошибке отказа в соединении.

Ниже приведено сообщение об ошибке при попытке подключения к Switch-A:

Подключение к устройству "Switch-A

Исключение: ошибка чтения баннера протокола SSH

Трассировка (последний последний вызов):

Файл "C: \ CorpApps \ Python36 \ lib \ site-packages \ paramiko-2.4.2-py3.6.egg \ paramiko \ transport.py ", строка 2138, в _check_banner

buf = self.packetizer.readline (timeout)

Файл" C: \ CorpApps \ Python36 \lib \ site-packages \ paramiko-2.4.2-py3.6.egg \ paramiko \ packet.py ", строка 367, в строке для чтения

buf + = self._read_timeout (timeout)

Файл "C: \ CorpApps \ Python36 \ lib \ site-packages \ paramiko-2.4.2-py3.6.egg \ paramiko \ packet.py", строка 563, в _read_timeout

повысить EOFError ()

EOFError


Сообщение об ошибке для SWITCH-B

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

Traceback (самое последнеевызов последнее):

Файл «Используй меня # 2.py», строка 39, в

net_connect = ConnectHandler (** ios_device)

Файл "C: \ CorpApps \Python36 \ lib \ site-packages \ netmiko-2.3.3-py3.6.egg \ netmiko \ ssh_dispatcher.py ", строка 228, в ConnectHandler

Файл" C: \ CorpApps \ Python36 \ lib \ site "-packages \ netmiko-2.3.3-py3.6.egg \ netmiko \ base_connection.py ", строка 312, в init

Файл" C: \ CorpApps \ Python36 \ lib \ "site-packages \ netmiko-2.3.3-py3.6.egg \ netmiko \ base_connection.py ", строка 858, в create_connection

KeyboardInterrupt

Во время обработки вышеуказанного исключения другое исключениеПроизошло:

Трассировка (последний последний вызов):

Файл "Use me # 2.py", строка 50, в

, кроме (SSHException):

TypeError: перехват классов, которые не наследуются от BaseException, не допускается

from netmiko import ConnectHandler
from netmiko.ssh_exception import  NetMikoTimeoutException
from paramiko.ssh_exception import SSHException 
from netmiko.ssh_exception import  AuthenticationException
from getpass import getpass
from pprint import pprint

with open('commandsv2.txt') as f:
    commands_list = f.read().splitlines()

with open('routersv3.txt') as f:
    router_list = f.read().splitlines()

username=input('Enter your username:')
password=getpass()
print (password)


for routers in router_list:
    print ('Connecting to device" ' + routers)
    ip_address_of_device = routers
    ios_device = {
    'device_type': 'cisco_ios',
    'ip': ip_address_of_device,
    'username': username,
    'password': password
    }

    Timeouts=open("Connection time outs.txt", "a")
    Authfailure=open("Auth failures.txt", "a")
    SSHException=("SSH Failure.txt", 'a')
    EOFError=("EOFerrors.txt",'a')
    UnknownError=("UnknownError.txt",'a')

    try:
        net_connect = ConnectHandler(**ios_device)  
        output=net_connect.send_config_set(commands_list)
        print(output)
    except (AuthenticationException):
        print ('Authentication Failure: ' + ip_address_of_device)
        Authfailure.write('\n' + ip_address_of_device)
        continue 
    except (NetMikoTimeoutException):
        print ('\n' + 'Timeout to device: ' + ip_address_of_device)
        Timeouts.write('\n' + ip_address_of_device)
        continue
    except (SSHException):
        print ('SSH might not be enabled: ' + ip_address_of_device)
        SSHException.write('\n' + ip_address_of_device)
        continue 
    except (EOFError):
        print ('\n' + 'End of attempting device: '  ip_address_of_device)
        EOFError.write('\n' + ip_address_of_device)
        continue
    except unknown_error:
        print ('Some other error: ' + str(unknown_error))
        continue
...