Når det gjelder nettverk, er det et bredt spekter av perspektiver, og man kan ikke mestre hvordan man kan samhandle med alle enhetene i den virkelige verden. Imidlertid deler alle nettverksenheter lignende funksjonalitet som, når de mestres, er automatiserbare.
Som nevnt i mine andre opplæringsprogrammer, er programmerere late og alltid ute etter å forbedre effektiviteten - og gjør dermed minst mulig arbeid 🙂 -, og når det gjelder automatisering av nettverksrelaterte problemer, hopper mange ofte på sjansen.
I dagens hurtigguide vil jeg introdusere deg for å automatisere SSH ved hjelp av to populære Python-biblioteker: Paramiko og Netmiko. Vi vil lage enkle python-skript ved hjelp av de to bibliotekene for å automatisere SSH og samhandle med nettverksenheter.
Jeg velger denne tilnærmingen fordi en guide primært fokusert på forskjellene mellom Paramiko og Netmiko vil være for kort - et enkelt bord vil være tilstrekkelig og ikke konkret. Ved å ta denne tilnærmingen vil du være bedre i stand til å eksperimentere med dem og se hvilke som gjør hva og hvordan.
La oss komme i gang:
Hva er Paramiko?
Den offisielle nettsiden definerer Paramiko som følger:
“Paramiko er en python (2.7, 3.4+) implementering av SSHv2-protokollen som gir både klient- og serverfunksjonalitet.”
Jeg håper det var klart. Grunnleggende betyr det Paramiko er et pythonbibliotek for interaksjon med SSH.
Nå:
Når vi vil logge på en server, vet vi at vi går til terminal-cmd, xterm, MobaXterm, eller bare Gnome Terminal-login, og deretter utfører kommandoer.
La oss se hvordan Paramiko kan hjelpe med det.
Hvordan installere Paramiko
For å bruke Paramiko, må vi installere den. Du bør ha Python - helst python 2 - installert på maskinen din. Bruk pip til å skrive inn kommandoen nedenfor for å installere Paramiko.
sudo pip installer ParamikoPython -m pip install paramiko
Hvis du ønsker å bygge fra kilden, kan du se det offisielle Paramiko GitHub-depotet ved hjelp av den medfølgende ressursen:
https: // github.com / paramiko / paramiko
Koble til SSH ved hjelp av Paramiko
For å koble til SSH ved hjelp av Paramiko, bruker vi connect () -metoden, som krever vertsnavn-parameteren - den støtter også andre parametere, men siden vi ikke trenger dem, kan vi ignorere dem for nå.
koble til (vertsnavn, port = 22, brukernavn = Ingen, passord = Ingen, pkey = Ingen, nøkkelfilnavn = Ingen, timeout = Ingen, allow_agent = True, look_for_keys = True, compress = False, sock = None, gss_auth = False, gss_kex = Usann, gss_deleg_creds = True, gss_host = Ingen, banner_timeout = Ingen, auth_timeout = Ingen, gss_trust_dns = True, passphrase = Ingen, disabled_algorithms = Ingen)Bruker denne funksjonen, som er tilgjengelig i paramiko. Klient.SSH-klient.connect (), kobler til det angitte vertsnavnet og autentiserer det. Målet systemet blir sjekket mot eksisterende lokale systemnøkler (klarert).
Hvis du har en bestemt vertsfil, kan du bruke metoden load_host_keys () og stille Paramiko SSH-klienten til å legge til en ukjent vert til paramiko.AutoAddPolicy (). Hvis du bruker klienten i ikke-klarerte systemer, unngå å bruke paramiko.AutoAddPolicy.
Koble SSH med et passord
Fra tilkoblingsmetoden kan vi se at vi har brukernavn og passordparametere som vi kan bruke til å koble til systemet. Vurder koden nedenfor for å koble SSH via brukernavn og passord.
fra paramiko import util, SSHClient, AutoAddPolicyklient = SSHClient ()
klient.load_system_host_keys ()
klient.load_host_keys ("/ home / linuxhint /.ssh / kjent_hosts ")
klient.set_missing_host_key_policy (AutoAddPolicy ())
klient.koble til (vertsnavn = "linuxhint.com ", brukernavn =" admin ", passord =" AdminPassword ")
klient.Lukk()
Hvis du støter på problemer når du importerer Paramiko SSHClient-klassen, se følgende stackoverflow-spørsmål:
https: // stackoverflow.no / spørsmål / 29378234 / python-import-paramiko-error-kan ikke importere navn-util
Koble til SSH via nøkkel
Som vi alle vet, er det sikrere å koble SSH via nøkkel enn å bruke et rå passord. Paramiko vet dette og lar deg sende nøkkelfilen og koble til målsystemet.
Tenk på koden nedenfor.
fra paramiko import SSHClientfra paramiko AutoAddPolicy
klient = SSHClient ()
klient.load_system_host_keys ()
klient.load_host_keys ('/ home / linuxhint /.ssh / kjent_hosts ')
klient.set_missing_host_key_policy (AutoAddPolicy ())
klient.koble til ('linuxhint.com ', brukernavn =' admin ', key_filename =' ssh_key.pem ', passphrase =' AdminPassphrase ')
klient.Lukk()
Kjører kommandoer over SSH
Når du får tilgang til systemet ved hjelp av SSH (over Paramiko), kan du utføre en rekke kommandoer. Vurder følgende kodebit:
klient = SSHClient ()klient.load_system_host_keys ()
klient.koble til ('linuxhint.com ')
stdin, stdout, stderr = klient.exec_command ('bash ")
stdin.Lukk()
stdout.Lukk()
stderr.Lukk()
klient.Lukk()
På dette tidspunktet vet du hvordan du bruker Paramiko-biblioteket til å automatisere SSH. Som du kan forestille deg, er dette ikke en omfattende Paramiko-guide, og vi dykker ikke inn i detaljer relatert til hva verktøyet gjør. Målet var å vise deg implementeringen.
For mer informasjon, se mer omfattende materialer som:
https: // docs.paramiko.org / no / stabil /
https: // github.com / paramiko / paramiko
Hva er Netmiko?
Netmiko er veldig populær og lik Paramiko med noen få signifikante forskjeller:
- Enhetsstøtte
- Opptreden
Når du arbeider med virkelige nettverk, vil du komme over forskjellige enhetsmodeller. Dermed trenger du et pålitelig verktøy som kan hjelpe deg med å automatisere prosessen. I noen tilfeller kan du ikke bruke Paramiko på grunn av begrensninger for enhetsstøtte, noe som fører til forsinkelser og krasj - du kan sjekke de støttede enhetene i den offisielle dokumentasjonen. Det er også betydelig tregere enn Netmiko.
Paramiko er mer en generisk SSH-modul som du kan bruke til å automatisere spesifikke SSH-oppgaver. I kontrast er Netmiko bredere og godt optimalisert for å administrere nettverksenheter som brytere og rutere.
Abstraksjon er den andre fordelen ved å bruke Netmiko. Netmiko gir en enkel funksjon du kan bruke til å deaktivere personsøk. For eksempel kan en utgang fra SSH-sesjonen være mer enn én side. Ved å bruke vanlige SSH-økter, må du legge til et input-lignende mellomrom for å vise neste side. Netmiko gir deg en måte å overstyre dette på.
Fordelene med Netmiko fremfor Paramiko er:
- Koble automatisk via SSH til nettverksenheter.
- Det gir enklere utføring av viser kommandoer og datautdata.
- Tilbyr enklere funksjonalitet for konfigurasjonskommandoer, inkludert begå handlinger.
- Støtte for flere enheter på tvers av nettverksenhetsleverandører og plattformer.
Hvordan installere Netmiko
Installering av Netmiko er også relativt enkelt:
Alt du trenger å gjøre er å sikre at du har Python og pip installert på systemet ditt og utføre kommandoen:
pip installere netmikopython -m pip installere netmiko
Koble til SSH ved hjelp av Netmiko
Det er veldig enkelt å koble til SSH-økter på enheten ved hjelp av Netmiko. Husk at Netmiko er mer optimalisert for enheter som rutere og ikke generisk SSH.
Tenk på kodebiten nedenfor.
#import modulerfra netmiko import ConnectHandler
# enhetsinformasjon i ordbokformat.
device_config =
“Device_type”: “cisco_ios”,
“Ip”: “192.168.0.1",
“Brukernavn”: “admin”,
“Passord”: “passord”,
“Hemmelig”: “passord”
tilkobling = ConnectHandler (** device_config)
Ved å bruke den enkle koden ovenfor vil du ha en SSH-forbindelse til enheten. Du kan også sende enhetsinformasjonen direkte i stedet for å sende den til en ordbok.
Når du har en SSH-økt, kan du utføre kommandoer ved hjelp av send_command () -funksjonen. Funksjoner som støttes av netmiko inkluderer:
Netmiko vanlige metoder:
- net_connect.send_command () - Denne funksjonen sender kommandoer ned en nettverkskanal og returnerer utdata basert på mønster.
- net_connect.send_command_timing () - Returnerer output basert på timing fra en kommando som sendes ned en nettverkskanal.
- net_connect.send_config_set () - Bruker konfigurasjonsinnstillinger på eksterne enheter.
- net_connect.send_config_from_file () - Bruker konfigurasjonsinnstillinger fra en ekstern fil
- net_connect.save_config () - Eksporterer og lagrer den løpende konfigurasjonen som startkonfigurasjon.
- net_connect.enable () - spør enheten om å aktivere aktiveringsmodus.
- net_connect.find_prompt () - Returner den nåværende ruteren
- net_connect.commit () - Kjører kommandokommandoer på enheter som Juniper og IOS-XR
- net_connect.koble fra () - Avslutter øktene
- net_connect.write_channel () - Aktiverer skriving på lavt nivå
- net_connect.read_channel () - Gjør det mulig å lese på lavt nivå.
Som nevnt tidligere er dette ikke en guide for hvordan du bruker Netmiko, men en enkel retning av hva Netmiko og Paramiko er. Sjekk den offisielle dokumentasjonen for mer informasjon.
https: // github.com / ktbyers / netmiko
Konklusjon
I denne hurtigveiledningen diskuterte vi hvordan du bruker paramiko til generiske SSH-tilkoblinger og Netmiko nettverksenhetsadministrasjon, illustrerer forskjellene mellom de to.
Å konkludere:
Paramiko | Netmiko |
Nyttig for generisk ssh bruk | Mest nyttig for nettverksenhetskonfigurasjon. |
Begrenset støtte for et bredt spekter av nettverksenheter. | Støtter et bredt spekter av nettverksenheter. |