Що се отнася до мрежите, има широк спектър от перспективи и човек не може да овладее как да взаимодейства с всички устройства в реалния свят. Всички мрежови устройства обаче споделят подобна функционалност, която, когато бъде усвоена, е автоматизирана.
Както бе споменато в другите ми уроци, програмистите са мързеливи и винаги се стремят да подобрят ефективността, като по този начин правят най-малко работа 🙂 - и когато става въпрос за автоматизиране на проблеми, свързани с мрежата, много от тях често се възползват.
В днешното кратко ръководство ще ви запозная с автоматизирането на SSH с помощта на две популярни библиотеки на Python: Парамико и Нетмико. Ще създадем прости python скриптове, използвайки двете библиотеки за автоматизиране на SSH и взаимодействие с мрежови устройства.
Избирам този подход, тъй като ръководство, фокусирано основно върху разликите между Парамико и Нетмико, би било твърде кратко - обикновена таблица би била достатъчна - и няма конкретна информация. Като възприемете този подход, ще можете по-добре да експериментирате с тях и да видите кой какво и как прави.
Да започваме:
Какво е Парамико?
Официалният уебсайт определя Парамико, както следва:
„Парамико е питон (2.7, 3.4+) внедряване на протокола SSHv2, който осигурява както клиентска, така и сървърна функционалност.”
Надявам се, че това беше ясно. В основата си това означава Paramiko е библиотека на python за взаимодействие със SSH.
Сега:
Когато искаме да влезем в сървър, знаем, че отиваме в терминала-cmd, xterm, MobaXterm или просто в Gnome Terminal-login, след което изпълняваме команди.
Нека да видим как Paramiko може да помогне с това.
Как да инсталирате 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 = Вярно, look_for_keys = Вярно, компресиране = Невярно, чорап = Няма, gss_auth = Невярно, gss_kex = Невярно, gss_deleg_creds = Вярно, gss_host = Няма, banner_timeout = Няма, auth_timeout = Няма, gss_trust_dns = Вярно, пропуск = Няма, disabled_algorithms = Няма)Използвайки тази функция, която се предлага в paramiko. Клиент.SSHClient.connect (), свързва се към посоченото име на хост и го удостоверява. Целевата система се проверява спрямо съществуващите локални системни ключове (доверени).
Ако имате конкретен хостов файл, можете да използвате метода load_host_keys () и да настроите Paramiko SSH клиента да добавя неизвестен хост към paramiko.AutoAddPolicy (). Ако използвате клиента в ненадеждни системи, избягвайте да използвате paramiko.AutoAddPolicy.
Свързване на SSH с парола
От метода на свързване можем да видим, че разполагаме с параметрите за потребителско име и парола, които можем да използваме за свързване със системата. Помислете за кода по-долу, за да свържете SSH чрез потребителско име и парола.
от paramiko import util, SSHClient, AutoAddPolicyклиент = SSHClient ()
клиент.load_system_host_keys ()
клиент.load_host_keys ("/ начало / 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 ('/ начало / linuxhint /.ssh / known_hosts ')
клиент.set_missing_host_key_policy (AutoAddPolicy ())
клиент.connect ('linuxhint.com ', потребителско име =' admin ', key_filename =' 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 / bg / стабилен /
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 инсталирайте netmikopython -m pip инсталирайте netmiko
Свързване към SSH с помощта на Netmiko
Свързването към SSH сесии на устройство с помощта на Netmiko е много просто. Не забравяйте, че Netmiko е по-оптимизиран за устройства като рутери, а не за общ SSH.
Помислете за кодовия фрагмент по-долу.
#import модулиот netmiko import ConnectHandler
# информация за устройството във формат на речника.
device_config =
“Device_type”: “cisco_ios”,
„Ip“: „192.168.0.1 ”,
„Потребителско име“: „администратор“,
“Парола”: “парола”,
“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 | Най-полезно за конфигуриране на мрежово устройство. |
Ограничена поддръжка за широк спектър от мрежови устройства. | Поддържа широка гама от мрежови устройства. |