Проверка подлинности Paramiko (оказывается обработкой исключений Python) - PullRequest
6 голосов
/ 16 июня 2011

Я пишу скрипт на Python, который извлекает конфигурации из маршрутизаторов Cisco, используя Paramiko для соединения SSH. Я также пытаюсь заставить его проверить правильность учетных данных для входа на устройство без сбоев.

Прямо сейчас код подключится и запустит нужные мне команды, если учетные данные верны. ОТЛИЧНЫЙ! Однако, если я введу неверные учетные данные, скрипт завершится с ошибкой аутентификации.

Код:

ip = *.*.*.*
u = username
p = password


ssh = paramiko.SSHClient()

ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

ssh.connect(ip, username=u, password=p)

shell = ssh.invoke_shell()

Как только я запустил программу и ввел неправильные учетные данные, это вывод.

paramiko.AuthenticationException: аутентификация не удалась.

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

Есть идеи?

1 Ответ

7 голосов
/ 16 июня 2011

Взгляните на раздел 8.3 (обработка исключений) в руководстве по Python . Вы можете «перехватить» исключение и обработать его, это предотвратит выход программы из исключения. Ваша программа завершит работу только в случае исключения, если ни один код не перехватит его.

try:
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect(ip, username=u, password=p)
    shell = ssh.invoke_shell()
except paramiko.AuthenticationException:
    print "We had an authentication exception!"
    shell = None

Однако вам придется написать свой код, чтобы он не работал, если shell равно None.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...