Що стосується мереж, то існує широкий спектр перспектив, і неможливо зрозуміти, як взаємодіяти з усіма пристроями в реальному світі. Однак усі мережеві пристрої мають схожу функціональність, яка при засвоєнні є автоматизованою.
Як згадувалося в моїх інших навчальних посібниках, програмісти ледачі і завжди прагнуть підвищити ефективність, роблячи таким чином найменшу роботу 🙂 -, а коли справа доходить до автоматизації проблем, пов’язаних з мережею, багато хто часто схиляється.
У сьогоднішньому короткому посібнику я познайомлю вас з автоматизацією SSH за допомогою двох популярних бібліотек Python: Параміко і Нетміко. Ми створимо прості скрипти python, використовуючи дві бібліотеки для автоматизації SSH та взаємодії з мережевими пристроями.
Я обираю такий підхід, оскільки керівництво, головним чином зосереджене на відмінностях між Параміко та Нетміко, було б занадто коротким - простої таблиці вистачило б - і не було б конкретного. Вибравши такий підхід, ви зможете краще експериментувати з ними та бачити, хто що і як робить.
Давайте розпочнемо:
Що таке Параміко?
Офіційний веб-сайт визначає Параміко таким чином:
“Параміко - це Пітон (2.7, 3.4+) реалізація протоколу SSHv2, що забезпечує функціональність як клієнта, так і сервера."
Сподіваюся, це було зрозуміло. В основі - це означає Paramiko - це бібліотека python для взаємодії з SSH.
Зараз:
Коли ми хочемо увійти на сервер, ми знаємо, що переходимо до терміналу-cmd, xterm, MobaXterm або просто до Gnome Terminal-login, а потім виконуємо команди.
Подивимось, як Параміко може в цьому допомогти.
Як встановити Paramiko
Щоб використовувати Paramiko, нам потрібно встановити його. На вашій машині повинен бути встановлений Python - бажано python 2. За допомогою pip введіть команду нижче, щоб встановити Paramiko.
sudo pip встановити ParamikoPython -m pip встановлює paramiko
Якщо ви хочете побудувати з джерела, зверніться до офіційного сховища Paramiko GitHub, використовуючи наданий ресурс:
https: // github.com / paramiko / paramiko
Підключення до SSH за допомогою Paramiko
Для підключення до SSH за допомогою Paramiko ми використовуємо метод connect (), який вимагає параметр імені хосту - він також підтримує інші параметри, але оскільки ми їх не потребуємо, наразі ми можемо їх ігнорувати.
підключити (ім'я хоста, порт = 22, ім'я користувача = Немає, пароль = Немає, pkey = Немає, ім'я_файлу ключа = Немає, час очікування = Немає, allow_agent = True, look_for_keys = True, стиснути = False, sock = Немає, gss_auth = False, gss_kex = False, gss_deleg_creds = True, gss_host = None, banner_timeout = None, auth_timeout = None, gss_trust_dns = True, passphrase = None, disabled_algorithms = None)Використовуючи цю функцію, яка доступна у paramiko. Клієнт.SSHClient.connect (), підключається до вказаного імені хосту та автентифікує його. Цільова система перевіряється за наявними локальними системними ключами (надійні).
Якщо у вас є конкретний файл хосту, ви можете скористатися методом load_host_keys () і встановити клієнт Paramiko SSH, щоб додати будь-який невідомий хост до paramiko.AutoAddPolicy (). Якщо ви використовуєте клієнта в ненадійних системах, уникайте використання paramiko.AutoAddPolicy.
Підключення SSH за допомогою пароля
За методом connect ми бачимо, що у нас є параметри імені користувача та пароля, які ми можемо використовувати для підключення до системи. Розгляньте наведений нижче код для підключення SSH за допомогою імені користувача та пароля.
від paramiko import util, SSHClient, AutoAddPolicyклієнт = SSHClient ()
клієнт.load_system_host_keys ()
клієнт.load_host_keys ("/ home / linuxhint /.ssh / known_hosts ")
клієнт.set_missing_host_key_policy (AutoAddPolicy ())
клієнт.підключити (ім'я хоста = "linuxhint.com ", ім'я користувача =" адміністратор ", пароль =" AdminPassword ")
клієнт.закрити ()
Якщо під час імпортування класу Paramiko SSHClient виникають проблеми, зверніться до наступного запитання щодо stackoverflow:
https: // stackoverflow.com / questions / 29378234 / python-import-paramiko-error-cannot-import-name-util
Підключення SSH через ключ
Як ми всі знаємо, підключення SSH за допомогою ключа є більш безпечним, ніж використання необробленого пароля. Paramiko це знає і дозволяє передавати файл ключа і підключатися до цільової системи.
Розгляньте наведений нижче код.
від paramiko import SSHClientвід paramiko AutoAddPolicy
клієнт = SSHClient ()
клієнт.load_system_host_keys ()
клієнт.load_host_keys ('/ home / linuxhint /.ssh / known_hosts ')
клієнт.set_missing_host_key_policy (AutoAddPolicy ())
клієнт.connect ('linuxhint.com ', ім'я користувача =' адміністратор ', ім'я_файлу =' ssh_key.pem ', passphrase =' AdminPassphrase ')
клієнт.закрити ()
Запуск команд через SSH
Отримавши доступ до системи за допомогою SSH (через Paramiko), ви можете виконати низку команд. Розглянемо такий фрагмент коду:
клієнт = SSHClient ()клієнт.load_system_host_keys ()
клієнт.connect ('linuxhint.com ')
stdin, stdout, stderr = клієнт.exec_command ('баш')
stdin.закрити ()
stdout.закрити ()
stderr.закрити ()
клієнт.закрити ()
На цьому етапі ви знаєте, як використовувати бібліотеку Paramiko для автоматизації SSH. Як ви можете собі уявити, це не вичерпний посібник Paramiko, і ми не заглиблюємось у подробиці, пов’язані з тим, що робить інструмент. Метою було показати вам його реалізацію.
Для отримання додаткової інформації, будь ласка, зверніться до більш вичерпних матеріалів, таких як:
https: // docs.параміко.org / en / stable /
https: // github.com / paramiko / paramiko
Що таке Netmiko?
Netmiko дуже популярний і схожий на Paramiko з декількома суттєвими відмінностями:
- Підтримка пристрою
- Продуктивність
Працюючи в реальних мережах, ви зустрінете різні моделі пристроїв. Таким чином, вам потрібен надійний інструмент, який може допомогти вам автоматизувати процес. У деяких випадках ви не можете використовувати Paramiko через обмеження підтримки пристроїв, що призводить до лагів та збоїв - ви можете перевірити підтримувані пристрої в офіційній документації. Це також значно повільніше, ніж Netmiko.
Paramiko - це більше загальний модуль SSH, який ви можете використовувати для автоматизації конкретних завдань SSH. На відміну від цього, Netmiko є ширшим і добре оптимізованим для управління мережевими пристроями, такими як комутатори та маршрутизатори.
Абстракція - ще одна перевага використання Netmiko. Netmiko надає просту функцію, яку можна використовувати для відключення підкачки. Наприклад, результатом сеансу SSH може бути більше однієї сторінки. Використовуючи звичайні сеанси SSH, вам доведеться додати простір, подібний до вводу, щоб показати наступну сторінку. Netmiko надає вам спосіб це замінити.
Перевагами Netmiko перед Paramiko є:
- Автоматично підключатися через SSH до мережевих пристроїв.
- Це забезпечує більш просте виконання команд шоу та виведення даних.
- Надає простіші функції для команд конфігурації, включаючи дії комітів.
- Підтримка декількох пристроїв у постачальників і платформ мережевих пристроїв.
Як встановити Netmiko
Встановити Netmiko також відносно просто:
Все, що вам потрібно зробити, це переконатися, що у вашій системі встановлені Python і pip, і виконати команду:
pip встановити netmiko - -python -m pip встановити netmiko
Підключення до SSH за допомогою Netmiko
Підключення до сеансів SSH пристрою за допомогою Netmiko дуже просте. Пам'ятайте, що Netmiko більш оптимізований для таких пристроїв, як маршрутизатори, а не загальний SSH.
Розглянемо фрагмент коду нижче.
# імпорт модуліввід імпорту netmiko ConnectHandler
# інформація про пристрій у форматі словника.
device_config =
“Device_type”: “cisco_ios”,
“Ip”: “192.168.0.1 ”,
“Username”: “адміністратор”,
“Пароль”: “пароль”,
“Secret”: “пароль”
з'єднання = ConnectHandler (** device_config)
Використовуючи простий код вище, ви матимете SSH-з’єднання з пристроєм. Ви також можете передавати інформацію про пристрій безпосередньо, замість того, щоб передавати її у словник.
Отримавши сеанс SSH, ви можете виконувати команди за допомогою функції send_command (). До функцій, які підтримує netmiko, належать:
Загальновживані методи Netmiko:
- net_connect.send_command () - Ця функція надсилає команди по мережевому каналу і повертає вихід на основі шаблону.
- net_connect.send_command_timing () - Повертає вихідні дані на основі часу від команди, відправленої по мережевому каналу.
- net_connect.send_config_set () - Застосовує параметри конфігурації до віддалених пристроїв.
- net_connect.send_config_from_file () - Застосовує параметри конфігурації із зовнішнього файлу
- net_connect.save_config () - експортує та зберігає запущену конфігурацію як конфігурацію запуску.
- net_connect.enable () - Запитує пристрій активувати режим увімкнення.
- net_connect.find_prompt () - Повернення поточного запиту маршрутизатора
- net_connect.commit () - запускає команди коміту на таких пристроях, як Juniper та IOS-XR
- net_connect.disconnect () - Завершує сеанси
- net_connect.write_channel () - Дозволяє записувати низький рівень
- net_connect.read_channel () - Дозволяє читати низький рівень.
Як вже згадувалося раніше, це не керівництво по використанню Netmiko, а просте керівництво тим, що таке Netmiko та Paramiko. Перегляньте офіційну документацію для отримання додаткової інформації.
https: // github.com / ktbyers / netmiko
Висновок
У цьому короткому посібнику ми обговорили, як використовувати paramiko для загальних з'єднань SSH та управління мережевими пристроями Netmiko, ілюструючи відмінності між ними.
Прийти до висновку:
Параміко | Нетміко |
Корисно для загального використання ssh | Найбільш корисний для конфігурації мережевих пристроїв. |
Обмежена підтримка широкого кола мережевих пристроїв. | Підтримує широкий спектр мережевих пристроїв. |