Što se tiče umrežavanja, postoji širok raspon perspektiva i ne može se savladati način interakcije sa svim uređajima u stvarnom svijetu. Međutim, svi mrežni uređaji dijele slične funkcije koje su, kad se savladaju, automatizirane.
Kao što je spomenuto u mojim drugim tutorijalima, programeri su lijeni i uvijek nastoje poboljšati učinkovitost - čineći tako najmanje posla 🙂 -, a što se tiče automatizacije mrežnih problema, mnogi često riskiraju.
U današnjem kratkom vodiču predstavit ću vam automatizaciju SSH-a pomoću dvije popularne Python knjižnice: Paramiko i Netmiko. Stvorit ćemo jednostavne python skripte pomoću dvije knjižnice za automatizaciju SSH-a i interakciju s mrežnim uređajima.
Odabirem ovaj pristup jer bi vodič koji se prvenstveno fokusirao na razlike između Paramika i Netmika bio prekratak - dovoljna bi bila jednostavna tablica - i ne bi bila konkretna. Uzimajući ovaj pristup, moći ćete bolje eksperimentirati s njima i vidjeti što što i kako radi.
Započnimo:
Što je Paramiko?
Službena web stranica definira Paramiko na sljedeći način:
„Paramiko je Python (2.7, 3.4+) implementacija SSHv2 protokola koji pruža funkcionalnost i klijenta i poslužitelja."
Nadam se da je to bilo jasno. Temeljno, to znači Paramiko je python biblioteka za interakciju sa SSH-om.
Sada:
Kada se želimo prijaviti na poslužitelj, znamo da idemo na terminal-cmd, xterm, MobaXterm ili samo na prijavu na Gnome Terminal, a zatim izvršavamo naredbe.
Pogledajmo kako Paramiko može pomoći u tome.
Kako instalirati Paramiko
Da bismo koristili Paramiko, moramo ga instalirati. Na računalu biste trebali instalirati Python - po mogućnosti python 2. Koristeći pip, unesite naredbu ispod kako biste instalirali Paramiko.
sudo pip instalirati ParamikoPython -m pip instalirati paramiko
Ako želite graditi iz izvora, obratite se službenom spremištu Paramiko GitHub koristeći ponuđeni resurs:
https: // github.com / paramiko / paramiko
Povezivanje na SSH pomoću Paramika
Za povezivanje sa SSH-om pomoću Paramiko-a koristimo metodu connect () koja zahtijeva parametar hostname -a također podržava i druge parametre, ali budući da ih ne trebamo, zasad ih možemo zanemariti.
povezivanje (ime hosta, port = 22, korisničko ime = Nijedno, lozinka = Nijedno, pkey = Nijedno, naziv_datoteke = Nijedan, timeout = Nijedan, allow_agent = True, look_for_keys = True, compress = False, sock = None, 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)Korištenjem ove funkcije koja je dostupna u paramiku. Klijent.SSHClient.connect (), povezuje se s navedenim imenom hosta i ovjerava ga. Ciljni sustav provjerava se prema postojećim ključevima lokalnog sustava (pouzdan).
Ako imate određenu datoteku hosta, možete koristiti metodu load_host_keys () i postaviti Paramiko SSH klijent da doda bilo koji nepoznati host u paramiko.AutoAddPolicy (). Ako koristite klijenta u nepouzdanim sustavima, izbjegavajte upotrebu paramika.AutoAddPolicy.
Povezivanje SSH-a lozinkom
Iz metode povezivanja možemo vidjeti da imamo parametre korisničkog imena i lozinke koje možemo koristiti za povezivanje sa sustavom. Razmotrite donji kod za povezivanje SSH-a putem korisničkog imena i lozinke.
iz paramiko import util, SSHClient, AutoAddPolicyklijent = SSHClient ()
klijent.load_system_host_keys ()
klijent.load_host_keys ("/ home / linuxhint /.ssh / poznati_hostovi ")
klijent.set_missing_host_key_policy (AutoAddPolicy ())
klijent.povezivanje (ime hosta = "linuxhint.com ", korisničko ime =" admin ", lozinka =" AdminPassword ")
klijent.Zatvoriti()
Ako naiđete na probleme prilikom uvoza klase Paramiko SSHClient, pogledajte sljedeće pitanje stackoverflow:
https: // stackoverflow.com / questions / 29378234 / python-import-paramiko-error-cannot-import-name-util
Povezivanje SSH putem ključa
Kao što svi znamo, povezivanje SSH-a putem ključa sigurnije je od upotrebe sirove lozinke. Paramiko to zna i omogućuje vam prosljeđivanje datoteke ključa i povezivanje s ciljnim sustavom.
Razmotrite donji kod.
iz paramiko import SSHClientiz paramiko AutoAddPolicy
klijent = SSHClient ()
klijent.load_system_host_keys ()
klijent.load_host_keys ('/ home / linuxhint /.ssh / poznati_hostovi ')
klijent.set_missing_host_key_policy (AutoAddPolicy ())
klijent.connect ('linuxhint.com ', korisničko ime =' admin ', naziv_datoteke =' ssh_key.pem ', passphrase =' AdminPassphrase ')
klijent.Zatvoriti()
Pokretanje naredbi preko SSH-a
Jednom kada pristupite sustavu pomoću SSH-a (preko Paramika), možete izvršiti niz naredbi. Razmotrite sljedeći isječak koda:
klijent = SSHClient ()klijent.load_system_host_keys ()
klijent.connect ('linuxhint.com ')
stdin, stdout, stderr = klijent.exec_command ('bash')
stdin.Zatvoriti()
stdout.Zatvoriti()
stderr.Zatvoriti()
klijent.Zatvoriti()
U ovom trenutku znate kako koristiti Paramiko knjižnicu za automatizaciju SSH-a. Kao što možete zamisliti, ovo nije sveobuhvatan vodič za Paramiko i ne ulazimo u detalje vezane uz ono što alat radi. Cilj je bio pokazati vam njegovu provedbu.
Dodatne informacije potražite u opsežnijim materijalima kao što su:
https: // docs.paramiko.org / hr / stabilno /
https: // github.com / paramiko / paramiko
Što je Netmiko?
Netmiko je vrlo popularan i sličan je Paramiku s nekoliko značajnih razlika:
- Podrška uređaja
- Izvođenje
Kada radite na mrežama iz stvarnog svijeta, naići ćete na razne modele uređaja. Stoga vam je potreban pouzdan alat koji vam može pomoći u automatizaciji postupka. U nekim slučajevima ne možete koristiti Paramiko zbog ograničenja podrške uređaja, što dovodi do kašnjenja i padova - podržane uređaje možete provjeriti u službenoj dokumentaciji. Također je znatno sporiji od Netmika.
Paramiko je više generički SSH modul koji možete koristiti za automatizaciju određenih SSH zadataka. Nasuprot tome, Netmiko je širi i dobro je optimiziran za upravljanje mrežnim uređajima poput prekidača i usmjerivača.
Apstrakcija je druga prednost korištenja Netmika. Netmiko nudi jednostavnu funkciju kojom možete onemogućiti straničenje. Na primjer, izlaz iz SSH sesije može biti više od jedne stranice. Korištenjem redovnih SSH sesija morat ćete dodati prostor sličan ulaznom za prikaz sljedeće stranice. Netmiko vam pruža način da to poništite.
Prednosti Netmika nad Paramikom su:
- Automatski se povežite putem SSH-a s mrežnim uređajima.
- Pruža jednostavnije izvršavanje naredbi emisije i izlaz podataka.
- Pruža jednostavniju funkcionalnost za konfiguracijske naredbe, uključujući radnje predavanja.
- Podrška za više uređaja kod dobavljača i platformi mrežnih uređaja.
Kako instalirati Netmiko
Instaliranje Netmika je također relativno jednostavno:
Sve što morate učiniti je osigurati da na vašem sustavu instalirate Python i pip i izvršiti naredbu:
pip instalirati netmikopython -m pip instalirati netmiko
Spajanje na SSH pomoću Netmika
Povezivanje sa SSH sesijama uređaja pomoću Netmika vrlo je jednostavno. Ne zaboravite da je Netmiko optimiziran za uređaje poput usmjerivača, a ne za generički SSH.
Razmotrite isječak koda u nastavku.
#import moduleiz netmiko uvoza ConnectHandler
# podataka o uređaju u formatu rječnika.
device_config =
“Device_type”: “cisco_ios”,
“Ip”: “192.168.0.1 ”,
“Username”: “admin”,
“Lozinka”: “lozinka”,
“Secret”: “lozinka”
veza = ConnectHandler (** device_config)
Koristeći gornji jednostavni kod, imat ćete SSH vezu s uređajem. Informacije o uređaju možete i proslijediti izravno, umjesto da ih proslijedite u rječnik.
Nakon što imate SSH sesiju, možete izvršavati naredbe pomoću funkcije send_command (). Funkcije koje podržava netmiko uključuju:
Netmiko najčešće korištene metode:
- net_connect.send_command () - Ova funkcija šalje naredbe niz mrežni kanal i vraća izlaz na temelju uzorka.
- net_connect.send_command_timing () - Vraća izlaz na temelju vremena iz naredbe poslane niz mrežni kanal.
- net_connect.send_config_set () - Primjenjuje postavke konfiguracije na udaljene uređaje.
- net_connect.send_config_from_file () - Primjenjuje postavke konfiguracije iz vanjske datoteke
- net_connect.save_config () - Izvozi i sprema pokrenutu konfiguraciju kao konfiguraciju pokretanja.
- net_connect.enable () - postavlja upit uređaju da aktivira način omogućavanja.
- net_connect.find_prompt () - Vrati trenutni upit usmjerivača
- net_connect.commit () - pokreće naredbe za urezivanje na uređajima kao što su Juniper i IOS-XR
- net_connect.disconnect () - Prekida sesije
- net_connect.write_channel () - Omogućuje pisanje na niskoj razini
- net_connect.read_channel () - Omogućuje čitanje na niskoj razini.
Kao što je ranije spomenuto, ovo nije vodič za upotrebu Netmika, već jednostavan smjer onoga što su Netmiko i Paramiko. Dodatne informacije potražite u službenoj dokumentaciji.
https: // github.com / ktbyers / netmiko
Zaključak
U ovom smo brzom vodiču razgovarali o tome kako koristiti paramiko za generičke SSH veze i upravljanje mrežnim uređajima Netmiko, ilustrirajući razlike između dva.
Zaključiti:
Paramiko | Netmiko |
Korisno za generičku upotrebu ssh-a | Najkorisnije za konfiguraciju mrežnog uređaja. |
Ograničena podrška za širok raspon mrežnih uređaja. | Podržava širok raspon mrežnih uređaja. |