Ko gre za mreženje, obstaja širok spekter perspektiv in ni mogoče obvladati, kako sodelovati z vsemi napravami v resničnem svetu. Vse omrežne naprave pa imajo podobno funkcionalnost, ki je obvladana samodejno.
Kot je bilo omenjeno v mojih drugih vajah, so programerji leni in si vedno prizadevajo za izboljšanje učinkovitosti, s čimer opravijo najmanj dela 🙂 - in ko gre za avtomatizacijo težav, povezanih z omrežjem, mnogi pogosto izkoristijo priložnost.
V današnjem kratkem priročniku vam bom predstavil avtomatizacijo SSH z uporabo dveh priljubljenih knjižnic Python: Paramiko in Netmiko. Z uporabo obeh knjižnic bomo ustvarili preproste skripte python za avtomatizacijo SSH in interakcijo z omrežnimi napravami.
Za ta pristop se odločim, ker bi bil vodič, osredotočen predvsem na razlike med Paramikom in Netmikom, prekratk - zadostovala bi preprosta tabela - in ne konkretna. S takšnim pristopom boste lažje eksperimentirali z njimi in ugotovili, kaj naredi kaj in kako.
Začnimo:
Kaj je Paramiko?
Uradna spletna stran Paramiko opredeljuje tako:
»Paramiko je piton (2.7, 3.4+) izvedba protokola SSHv2, ki zagotavlja odjemalsko in strežniško funkcionalnost."
Upam, da je bilo to jasno. Temeljno pomeni Paramiko je python knjižnica za interakcijo s SSH.
Zdaj:
Ko se želimo prijaviti v strežnik, vemo, da gremo na terminal-cmd, xterm, MobaXterm ali samo prijavo v Gnome Terminal, nato pa izvršimo ukaze.
Poglejmo, kako lahko Paramiko pri tem pomaga.
Kako namestiti Paramiko
Če želite uporabljati Paramiko, ga moramo namestiti. V računalniku bi morali imeti nameščen Python - po možnosti python 2. S pomočjo pipa vnesite spodnji ukaz za namestitev Paramiko.
sudo pip namestite ParamikoPython -m pip namesti paramiko
Če želite graditi iz vira, poiščite uradno skladišče Paramiko GitHub z uporabo priloženega vira:
https: // github.com / paramiko / paramiko
Povezava s SSH s pomočjo Paramiko
Za povezavo s SSH s pomočjo Paramiko uporabljamo metodo connect (), ki zahteva parameter gostiteljskega imena - podpira tudi druge parametre, ker pa jih ne potrebujemo, jih lahko za zdaj prezremo.
poveži (ime gostitelja, vrata = 22, uporabniško ime = Brez, geslo = Brez, pkey = Brez, ime_datoteke = Brez, časovna omejitev = Brez, dovoli_agent = True, look_for_keys = True, compress = False, nogavica = None, gss_auth = False, gss_kex = False, gss_deleg_creds = True, gss_host = Brez, banner_timeout = Brez, auth_timeout = Brez, gss_trust_dns = True, geslo = Brez, disabled_algorithms = Brez)Uporaba te funkcije, ki je na voljo v paramiko. Naročnik.SSHClient.connect (), poveže se z določenim imenom gostitelja in ga preveri. Ciljni sistem se preveri glede na obstoječe lokalne sistemske ključe (zaupanja vreden).
Če imate določeno gostiteljsko datoteko, lahko uporabite metodo load_host_keys () in nastavite odjemalca Paramiko SSH, da v paramiko doda neznanega gostitelja.AutoAddPolicy (). Če odjemalca uporabljate v nezaupljivih sistemih, se izogibajte uporabi paramika.AutoAddPolicy.
Povezovanje SSH z geslom
Iz metode povezovanja lahko vidimo, da imamo parametre uporabniškega imena in gesla, s katerimi se lahko povežemo s sistemom. Upoštevajte spodnjo kodo za povezavo SSH z uporabniškim imenom in geslom.
iz paramiko import util, SSHClient, AutoAddPolicyodjemalec = SSHClient ()
stranka.load_system_host_keys ()
stranka.load_host_keys ("/ home / linuxhint /.ssh / known_hosts ")
stranka.set_missing_host_key_policy (AutoAddPolicy ())
stranka.poveži (ime gostitelja = "linuxhint.com ", uporabniško ime =" admin ", geslo =" AdminPassword ")
stranka.zapri ()
Če pri uvozu razreda Paramiko SSHClient naletite na težave, glejte naslednje vprašanje stackoverflow:
https: // stackoverflow.com / questions / 29378234 / python-import-paramiko-error-can't-import-name-util
Povezava SSH prek ključa
Kot vsi vemo, je povezovanje SSH prek ključa varnejše kot uporaba surovega gesla. Paramiko to ve in vam omogoča, da prenesete datoteko ključa in se povežete s ciljnim sistemom.
Upoštevajte spodnjo kodo.
iz paramiko import SSHClientod paramiko AutoAddPolicy
odjemalec = SSHClient ()
stranka.load_system_host_keys ()
stranka.load_host_keys ('/ home / linuxhint /.ssh / known_hosts ')
stranka.set_missing_host_key_policy (AutoAddPolicy ())
stranka.connect ('linuxhint.com ', uporabniško ime =' admin ', key_filename =' ssh_key.pem ', passphrase =' AdminPassphrase ')
stranka.zapri ()
Izvajanje ukazov prek SSH
Ko pridobite dostop do sistema s pomočjo SSH (prek Paramika), lahko izvedete vrsto ukazov. Upoštevajte naslednji delček kode:
odjemalec = SSHClient ()stranka.load_system_host_keys ()
stranka.connect ('linuxhint.com ')
stdin, stdout, stderr = odjemalec.exec_command ('bash')
stdin.zapri ()
stdout.zapri ()
stderr.zapri ()
stranka.zapri ()
Na tej točki veste, kako uporabljati knjižnico Paramiko za avtomatizacijo SSH. Kot si lahko predstavljate, to ni izčrpen vodnik Paramiko in se ne spuščamo v podrobnosti, povezane s tem, kaj orodje počne. Cilj je bil pokazati, kako se izvaja.
Za več informacij glejte obsežnejša gradiva, kot so:
https: // docs.paramiko.org / sl / stabilno /
https: // github.com / paramiko / paramiko
Kaj je Netmiko?
Netmiko je zelo priljubljen in podoben Paramiku z nekaj pomembnimi razlikami:
- Podpora za naprave
- Izvedba
Pri delu v resničnih omrežjih boste naleteli na različne modele naprav. Zato potrebujete zanesljivo orodje, ki vam lahko pomaga avtomatizirati postopek. V nekaterih primerih Paramika ne morete uporabljati zaradi omejitev podpore naprav, ki vodijo do zastojev in zrušitev - podprte naprave lahko preverite v uradni dokumentaciji. Je tudi precej počasnejši od Netmika.
Paramiko je bolj generični SSH modul, ki ga lahko uporabite za avtomatizacijo določenih SSH nalog. Nasprotno pa je Netmiko širši in dobro optimiziran za upravljanje omrežnih naprav, kot so stikala in usmerjevalniki.
Druga prednost uporabe Netmika je abstrakcija. Netmiko ponuja preprosto funkcijo, s katero lahko onemogočite ostranjevanje. Na primer, izhod iz seje SSH je lahko več kot ena stran. Z rednimi sejami SSH boste morali dodati vhodni prostor za prikaz naslednje strani. Netmiko vam ponuja način, da to preglasite.
Prednosti Netmika pred Paramikom so:
- Samodejno se povežite prek SSH z omrežnimi napravami.
- Omogoča enostavnejše izvajanje ukazov show in izpis podatkov.
- Ponuja preprostejšo funkcionalnost za ukaze za konfiguracijo, vključno z dejanji izdaje.
- Podpora za več naprav pri prodajalcih in platformah omrežnih naprav.
Kako namestiti Netmiko
Namestitev Netmika je tudi sorazmerno enostavna:
Vse, kar morate storiti, je zagotoviti, da imate v sistemu nameščene Python in pip, in izvršiti ukaz:
pip namestite netmikopython -m pip namestite netmiko
Povezava s SSH z uporabo Netmika
Povezava s SSH sejami naprave z uporabo Netmika je zelo preprosta. Ne pozabite, da je Netmiko bolj optimiziran za naprave, kot so usmerjevalniki in ne generični SSH.
Upoštevajte spodnji delček kode.
#import moduleiz netmiko import ConnectHandler
# informacije o napravi v obliki slovarja.
device_config =
“Device_type”: “cisco_ios”,
“Ip”: “192.168.0.1 ",
“Username”: “admin”,
“Geslo”: “geslo”,
“Secret”: “geslo”
connection = ConnectHandler (** device_config)
Z zgoraj navedeno preprosto kodo boste imeli na napravi SSH povezavo. Informacije o napravi lahko posredujete tudi neposredno, namesto da jih posredujete v slovar.
Ko imate sejo SSH, lahko ukaze izvajate s funkcijo send_command (). Funkcije, ki jih podpira netmiko, vključujejo:
Netmiko najpogosteje uporabljene metode:
- net_connect.send_command () - Ta funkcija pošlje ukaze po omrežnem kanalu in vrne izhod na podlagi vzorca.
- net_connect.send_command_timing () - Vrne izhod na podlagi časa iz ukaza, poslanega po omrežnem kanalu.
- net_connect.send_config_set () - Uporabi nastavitve konfiguracije za oddaljene naprave.
- net_connect.send_config_from_file () - uporabi nastavitve konfiguracije iz zunanje datoteke
- net_connect.save_config () - izvozi in shrani tekočo konfiguracijo kot zagonsko konfiguracijo.
- net_connect.enable () - naprava pozove, naj vklopi način za omogočanje.
- net_connect.find_prompt () - vrne trenutni poziv usmerjevalnika
- net_connect.commit () - Zažene ukaze za urejanje v napravah, kot sta Juniper in IOS-XR
- net_connect.disconnect () - konča seje
- net_connect.write_channel () - Omogoča pisanje na nizki ravni
- net_connect.read_channel () - Omogoča branje na nizki ravni.
Kot smo že omenili, to ni vodnik o tem, kako uporabljati Netmiko, temveč preprosta usmeritev tega, kaj sta Netmiko in Paramiko. Za več informacij poglejte v uradno dokumentacijo.
https: // github.com / ktbyers / netmiko
Zaključek
V tem kratkem priročniku smo razpravljali o uporabi paramika za generične SSH povezave in upravljanje omrežnih naprav Netmiko ter ponazorili razlike med obema.
Za zaključek:
Paramiko | Netmiko |
Uporabno za splošno uporabo ssh | Najbolj uporabno za konfiguracijo omrežne naprave. |
Omejena podpora za široko paleto omrežnih naprav. | Podpira široko paleto omrežnih naprav. |