Kalbant apie tinklų kūrimą, yra daugybė perspektyvų ir negalima išmokti, kaip bendrauti su visais įrenginiais realiame pasaulyje. Tačiau visi tinklo įrenginiai turi panašią funkciją, kurią įvaldžius galima automatizuoti.
Kaip minėta kitose mano pamokose, programuotojai yra tingūs ir visada siekia pagerinti efektyvumą, todėl dirba mažiausiai darbo 🙂, o kai reikia automatizuoti su tinklu susijusias problemas, daugelis dažnai šansuoja.
Šiandieniniame trumpame vadove supažindinsiu jus su SSH automatizavimu naudojant dvi populiarias „Python“ bibliotekas: Paramiko ir Netmiko. Mes sukursime paprastus python scenarijus naudodami dvi bibliotekas SSH automatizavimui ir sąveikai su tinklo įrenginiais.
Pasirinkau tokį požiūrį, nes vadovas, daugiausia orientuotas į skirtumus tarp „Paramiko“ ir „Netmiko“, būtų per trumpas - pakaktų paprastos lentelės ir nebūtų konkretus. Laikydamiesi šio požiūrio, galėsite geriau eksperimentuoti su jais ir pamatyti, kas ką ir kaip daro.
Pradėkime:
Kas yra Paramiko?
Oficialioje svetainėje „Paramiko“ apibrėžiama taip:
„Paramiko yra pitonas (2.7, 3.4+) SSHv2 protokolo įgyvendinimas, užtikrinantis kliento ir serverio funkcijas.“
Tikiuosi, kad tai buvo aišku. Iš esmės tai reiškia „Paramiko“ yra pitonų biblioteka, skirta bendrauti su SSH.
Dabar:
Kai norime prisijungti prie serverio, žinome, kad einame į terminal-cmd, xterm, MobaXterm arba tiesiog „Gnome Terminal-login“, tada vykdome komandas.
Pažiūrėkime, kaip „Paramiko“ gali tai padėti.
Kaip įdiegti „Paramiko“
Norėdami naudoti „Paramiko“, turime jį įdiegti. Savo kompiuteryje turėtumėte būti įdiegę „Python“ - pageidautina „Python 2“. Naudodami pip įveskite toliau pateiktą komandą, kad įdiegtumėte „Paramiko“.
sudo pip įdiegti ParamikoPython -m pip įdiekite paramiko
Jei norite kurti iš šaltinio, apsilankykite oficialioje „Paramiko GitHub“ saugykloje naudodami pateiktą šaltinį:
https: // github.com / paramiko / paramiko
Prisijungimas prie SSH naudojant „Paramiko“
Norėdami prisijungti prie SSH naudodami „Paramiko“, mes naudojame metodą „connect ()“, kuriam reikalingas parametras „hostname“ - jis palaiko ir kitus parametrus, tačiau kadangi mes jų nereikalaujame, galime juos dabar ignoruoti.
prisijungti (pagrindinio kompiuterio vardas, prievadas = 22, vartotojo vardas = Nėra, slaptažodis = Nėra, raktas = Nėra, key_filename = Nėra, timeout = Nėra, allow_agent = True, look_for_keys = True, compress = False, kojinė = Nėra, gss_auth = Klaidinga, gss_kex = False, gss_deleg_creds = True, gss_host = Nėra, banner_timeout = Nėra, auth_timeout = Nėra, gss_trust_dns = Tiesa, slaptafrazė = Nėra, invalid_algorithms = Nėra)Naudojant šią funkciją, kurią galima rasti paramiko. Klientas.SSHClient.prisijungti (), prisijungti prie nurodyto pagrindinio kompiuterio pavadinimo ir jį autentifikuoti. Tikslinė sistema tikrinama pagal esamus vietinės sistemos raktus (patikimus).
Jei turite konkretų pagrindinio failo failą, galite naudoti metodą „load_host_keys ()“ ir nustatyti „Paramiko SSH“ klientą pridėti nežinomą pagrindinį kompiuterį prie „paramiko“.„AutoAddPolicy“ (). Jei klientą naudojate nepatikimose sistemose, venkite naudoti „paramiko“.„AutoAddPolicy“.
SSH prijungimas naudojant slaptažodį
Iš prisijungimo metodo galime pamatyti, kad turime vartotojo vardo ir slaptažodžio parametrus, kuriuos galime naudoti prisijungdami prie sistemos. Apsvarstykite toliau pateiktą kodą, kad prisijungtumėte SSH naudodami vartotojo vardą ir slaptažodį.
iš paramiko import util, SSHClient, AutoAddPolicyklientas = SSHClient ()
klientas.load_system_host_keys ()
klientas.load_host_keys ("/ namai / linuxhint /.ssh / žinomi_hosts ")
klientas.set_missing_host_key_policy (AutoAddPolicy ())
klientas.prisijungti (hostname = "linuxhint.com ", vartotojo vardas =" admin ", slaptažodis =" Administratoriaus slaptažodis ")
klientas.Uždaryti()
Jei kyla problemų importuojant „Paramiko SSHClient“ klasę, perskaitykite šį „stackoverflow“ klausimą:
https: // stackoverflow.com / questions / 29378234 / python-import-paramiko-error-can't-import-name-util
SSH prijungimas per raktą
Kaip visi žinome, SSH prijungimas per raktą yra saugesnis, nei naudojant neapdorotą slaptažodį. Paramiko tai žino ir leidžia perduoti rakto failą ir prisijungti prie tikslinės sistemos.
Apsvarstykite toliau pateiktą kodą.
iš paramiko importo SSHClientiš „paramiko AutoAddPolicy“
klientas = SSHClient ()
klientas.load_system_host_keys ()
klientas.load_host_keys ('/ namai / linuxhint /.ssh / žinomi_hosts ')
klientas.set_missing_host_key_policy (AutoAddPolicy ())
klientas.prisijungti ('linuxhint.com ', vartotojo vardas =' admin ', key_filename =' ssh_key.pem ', passphrase =' AdminPassphrase ')
klientas.Uždaryti()
Komandų vykdymas per SSH
Gavę prieigą prie sistemos naudodami SSH (per „Paramiko“), galite atlikti komandų seriją. Apsvarstykite šį kodo fragmentą:
klientas = SSHClient ()klientas.load_system_host_keys ()
klientas.prisijungti ('linuxhint.com ')
stdin, stdout, stderr = klientas.exec_command ('bash')
stdin.Uždaryti()
stdout.Uždaryti()
stderr.Uždaryti()
klientas.Uždaryti()
Šiuo metu jūs žinote, kaip naudoti „Paramiko“ biblioteką SSH automatizavimui. Kaip galite įsivaizduoti, tai nėra išsamus „Paramiko“ vadovas, ir mes nesigiliname į detales, susijusias su įrankio veikla. Tikslas buvo parodyti jums jo įgyvendinimą.
Norėdami gauti daugiau informacijos, skaitykite išsamesnes medžiagas, tokias kaip:
https: // docs.paramiko.org / lt / stabilus /
https: // github.com / paramiko / paramiko
Kas yra Netmiko?
„Netmiko“ yra labai populiarus ir panašus į „Paramiko“, turėdamas keletą reikšmingų skirtumų:
- Įrenginio palaikymas
- Spektaklis
Dirbdami realaus pasaulio tinkluose susidursite su įvairiais įrenginių modeliais. Taigi jums reikia patikimo įrankio, kuris galėtų padėti jums automatizuoti procesą. Kai kuriais atvejais negalite naudoti „Paramiko“ dėl įrenginio palaikymo apribojimų, dėl kurių atsiranda vėlavimų ir gedimų. Palaikomus įrenginius galite patikrinti oficialiuose dokumentuose. Jis taip pat yra žymiai lėtesnis nei „Netmiko“.
„Paramiko“ yra labiau bendras SSH modulis, kurį galite naudoti automatizuodami konkrečias SSH užduotis. Priešingai, „Netmiko“ yra platesnis ir gerai optimizuotas valdyti tinklo įrenginius, tokius kaip jungikliai ir maršrutizatoriai.
Abstrakcija yra kitas „Netmiko“ naudojimo pranašumas. „Netmiko“ pateikia paprastą funkciją, kurią galite naudoti norėdami išjungti puslapių paiešką. Pavyzdžiui, SSH seanso išvestis gali būti daugiau nei vienas puslapis. Naudodamiesi įprastomis SSH sesijomis, turėsite pridėti įvestį panašią vietą, kad būtų rodomas kitas puslapis. „Netmiko“ suteikia jums galimybę tai nepaisyti.
„Netmiko“ pranašumai, palyginti su „Paramiko“, yra šie:
- Automatiškai prisijungti per SSH prie tinklo įrenginių.
- Tai suteikia paprastesnį laidų komandų ir duomenų išvesties vykdymą.
- Suteikia paprastesnę konfigūracijos komandų funkciją, įskaitant atlikimo veiksmus.
- Kelių įrenginių palaikymas visuose tinklo įrenginių tiekėjams ir platformose.
Kaip įdiegti „Netmiko“
Taip pat palyginti lengva įdiegti „Netmiko“:
Viskas, ką jums reikia padaryti, tai įsitikinti, kad sistemoje turite įdiegę „Python“ ir „pip“, ir vykdykite komandą:
pip įdiegti netmikopython -m pip įdiegti netmiko
Prisijungimas prie SSH naudojant „Netmiko“
Prisijungti prie įrenginio SSH sesijų naudojant „Netmiko“ yra labai paprasta. Atminkite, kad „Netmiko“ yra labiau optimizuotas tokiems įrenginiams kaip maršrutizatoriai, o ne bendram SSH.
Apsvarstykite toliau pateiktą kodo fragmentą.
#import moduliaiiš „netmiko“ importo „ConnectHandler“
# įrenginio informacija žodyno formatu.
device_config =
„Device_type“: „cisco_ios“,
„Ip“: „192.168.0.1 “,
„Vartotojo vardas“: „admin“,
„Slaptažodis“: „slaptažodis“,
„Paslaptis“: „slaptažodis“
ryšys = „ConnectHandler“ (** device_config)
Naudodami paprastą kodą aukščiau, turėsite SSH ryšį su įrenginiu. Taip pat galite perduoti prietaiso informaciją tiesiogiai, o ne perduoti ją į žodyną.
Atlikę SSH sesiją, galite vykdyti komandas naudodami funkciją send_command (). „Netmiko“ palaikomos funkcijos:
„Netmiko“ dažniausiai naudojami metodai:
- net_connect.send_command () - ši funkcija siunčia komandas tinklo kanalu ir grąžina išvestį pagal modelį.
- net_connect.send_command_timing () - grąžina išvestį pagal laiką iš komandos, išsiųstos tinklo kanalu.
- net_connect.send_config_set () - taiko konfigūracijos parametrus nuotoliniams įrenginiams.
- net_connect.send_config_from_file () - Taiko konfigūracijos parametrus iš išorinio failo
- net_connect.save_config () - eksportuoja ir išsaugo veikiančią konfigūraciją kaip paleidimo konfigūraciją.
- net_connect.įgalinti () - užklausia įrenginį, kad būtų įjungtas įjungimo režimas.
- net_connect.find_prompt () - grąžina esamą maršrutizatoriaus eilutę
- net_connect.įsipareigoti () - vykdo komandas tokiuose įrenginiuose kaip „Juniper“ ir „IOS-XR“
- net_connect.atjungti () - nutraukia sesijas
- net_connect.write_channel () - įgalina žemo lygio rašymą
- net_connect.read_channel () - įgalina žemo lygio skaitymą.
Kaip minėta anksčiau, tai nėra vadovas, kaip naudotis „Netmiko“, bet paprasta nurodymas, kas yra „Netmiko“ ir „Paramiko“. Norėdami gauti daugiau informacijos, patikrinkite oficialius dokumentus.
https: // github.com / ktbyers / netmiko
Išvada
Šiame greitame vadove aptarėme, kaip naudoti „paramiko“ bendriesiems SSH ryšiams ir „Netmiko“ tinklo įrenginių valdymui, iliustruojant šių dviejų skirtumus.
Pabaigai:
Paramiko | Netmiko |
Naudinga bendram ssh naudojimui | Naudingiausia tinklo įrenginio konfigūracijai. |
Ribotas palaikymas įvairiems tinklo įrenginiams. | Palaiko platų tinklo įrenginių asortimentą. |