Python för nätverksautomation
Använd Python-bibliotek som `paramiko` och `netmiko` för att kommunicera med nätverksenheter via SSH och automatisera konfigurationer.
Python för nätverksautomation är en gratis lektion i Linux-nätverk och TCP/IP för utvecklare på CoddyKit. Detta är lektion 2 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Linux-nätverk och TCP/IP för utvecklare, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Linux-nätverk och TCP/IP för utvecklare innehåller totalt 4 lektioner.
Python för nätverksautomation
Välkommen till nätverksautomation med Python! Python är ett kraftfullt och mångsidigt språk, vilket gör det populärt för automatisering av nätverksuppgifter.
Det förenklar komplexa åtgärder, hjälper dig att hantera enheter och kan integreras med olika nätverks-API:er. Vi ska se hur!
Introduktion till Paramiko
Vårt första verktyg är Paramiko. Det är ett Python-bibliotek som implementerar SSHv2-protokollet. Se det som en lågnivåverktygslåda för säkra shell-anslutningar (SSH).
- SSH-klient/-server: Kan fungera som både klient och server.
- Säkert: Använder stark kryptering för kommunikationen.
- Mångsidigt: Utmärkt för allmänna SSH-uppgifter, som att köra kommandon eller överföra filer.
Paramiko: grundläggande SSH-anslutning
Så här kan du använda Paramiko för att ansluta till en fjärrserver och köra ett kommando. Kom ihåg att ersätta platshållaruppgifterna!
import paramiko
def connect_and_run(hostname, username, password, command):
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
client.connect(hostname=hostname, username=username, password=password, timeout=5)
stdin, stdout, stderr = client.exec_command(command)
print(f"Output:\n{stdout.read().decode().strip()}")
print(f"Errors:\n{stderr.read().decode().strip()}")
except paramiko.AuthenticationException:
print("Authentication failed, please check your credentials.")
except paramiko.SSHException as e:
print(f"SSH connection error: {e}")
except Exception as e:
print(f"An error occurred: {e}")
finally:
client.close()
if __name__ == "__main__":
# Replace with your actual server details and command
HOST = "your_server_ip"
USER = "your_username"
PASS = "your_password"
CMD = "echo Hello from Paramiko!"
print("Attempting to connect with Paramiko...")
connect_and_run(HOST, USER, PASS, CMD)
print("Note: This code won't connect without a live server and valid credentials.")Hantera kommandoutdata
När du kör client.exec_command(command) returneras tre filliknande objekt: stdin, stdout och stderr.
- stdout: Kommandots standardutdata.
- stderr: Eventuella felmeddelanden som kommandot genererar.
- stdin: Används för att skicka indata till kommandot (mindre vanligt vid enkel exec).
Avkoda alltid utdatan (t.ex. med .decode()) eftersom den kommer som bytes.
Paramiko för filöverföringar (SFTP)
Förutom att köra kommandon har Paramiko även stöd för SFTP (SSH File Transfer Protocol). Det gör att du kan kopiera filer säkert till och från fjärrsystem.
Du kan använda det för att ladda upp konfigurationsfiler, ladda ned loggar eller hantera programpaket på dina nätverksenheter.
Introduktion till Netmiko
Även om Paramiko är kraftfullt kräver interaktion med specifika nätverksenheter ofta extra logik för promptar, sidbrytning och olika kommandolägen. Det är där Netmiko kommer till sin rätt!
- Bygger på Paramiko: Använder Paramiko i bakgrunden.
- Enhetsspecifikt: Har stöd för många leverantörer (Cisco, Juniper, Arista med flera).
- Förenklat API: Hanterar vanliga interaktioner med nätverksenheter automatiskt.
Netmiko: Ansluta till nätverksenheter
Netmiko använder en dictionary för att definiera enhetsinformation, vilket gör anslutningar enkla. Det förenklar många uppgifter inom nätverksautomation.
from netmiko import ConnectHandler
def connect_with_netmiko(device_info):
try:
print(f"Attempting to connect to {device_info['host']} with Netmiko...")
net_connect = ConnectHandler(**device_info)
print(f"Successfully connected to {net_connect.base_prompt}")
net_connect.disconnect()
print("Disconnected from device.")
except Exception as e:
print(f"Netmiko connection error: {e}")
if __name__ == "__main__":
# Replace with your actual device details
device = {
"device_type": "cisco_ios", # e.g., cisco_ios, juniper_junos, etc.
"host": "your_device_ip",
"username": "your_username",
"password": "your_password",
"secret": "your_enable_secret" # Optional, for enable mode
}
connect_with_netmiko(device)
print("Note: This code won't connect without a live device and valid credentials.")Netmiko: Skicka konfiguration
Netmiko är särskilt bra på att skicka konfigurationskommandon. Använd send_config_set() för en lista med kommandon och send_command() för operativa kommandon.
from netmiko import ConnectHandler
def send_config_to_device(device_info, config_commands):
try:
print(f"Connecting to {device_info['host']} to send config...")
net_connect = ConnectHandler(**device_info)
print("Sending configuration commands...")
output = net_connect.send_config_set(config_commands)
print(f"Configuration Output:\n{output}")
net_connect.disconnect()
print("Disconnected.")
except Exception as e:
print(f"Netmiko config error: {e}")
if __name__ == "__main__":
# Replace with your actual device details
device = {
"device_type": "cisco_ios",
"host": "your_device_ip",
"username": "your_username",
"password": "your_password",
"secret": "your_enable_secret"
}
# Example configuration commands
config_lines = [
"hostname CoddyRouter",
"no ip domain lookup",
"line vty 0 4",
"login local"
]
send_config_to_device(device, config_lines)
print("Note: This code won't apply config without a live device and valid credentials.")Bästa praxis och säkerhet
Prioritera alltid säkerhet och robusthet när du automatiserar:
- Hantering av autentiseringsuppgifter: Hårdkoda aldrig lösenord. Använd miljövariabler, säkra valv eller inmatningspromptar.
- Felhantering: Använd
try-except-block för att hantera anslutningsproblem eller misslyckade kommandon på ett kontrollerat sätt. - Loggning: Logga alla åtgärder och all utdata för granskning och felsökning.
- Idempotens: Utforma skript så att de är idempotenta (att köra dem flera gånger ger samma resultat som att köra dem en gång).
Paramiko jämfört med Netmiko
Du har nu sett både Paramiko och Netmiko. Nu testar vi dina kunskaper om när du ska använda vilket verktyg för dina uppgifter inom nätverksautomation.
Sammanfattning: Python för nätverksautomation
Bra jobbat! I den här lektionen lärde du dig om:
- Paramiko: Ett lågnivåbibliotek för Python för allmänna SSH-klient- och serveruppgifter samt SFTP.
- Netmiko: Ett högnivåbibliotek som bygger på Paramiko och är särskilt utformat för att automatisera interaktioner med olika nätverksenheter.
Med dessa verktyg kan du skriva kraftfulla Python-skript för att programmatiskt hantera, konfigurera och övervaka din nätverksinfrastruktur!
Lär dig Linux-nätverk och TCP/IP för utvecklare med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 12
- Lektioner
- 48
Vanliga frågor
Är lektionen ”Python för nätverksautomation” gratis?
Ja – hela texten till ”Python för nätverksautomation” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Linux-nätverk och TCP/IP för utvecklare, kan Ni uppgradera till CoddyKit PRO. Kursen i Linux-nätverk och TCP/IP för utvecklare innehåller totalt 4 lektioner.
Vad lär jag mig i ”Python för nätverksautomation”?
Använd Python-bibliotek som `paramiko` och `netmiko` för att kommunicera med nätverksenheter via SSH och automatisera konfigurationer. Ni övar på Linux-nätverk och TCP/IP för utvecklare med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Linux-nätverk och TCP/IP för utvecklare?
Du behöver inga förkunskaper. Utbildningen i Linux-nätverk och TCP/IP för utvecklare på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.
Hur lång tid tar lektionen ”Python för nätverksautomation”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Linux-nätverk och TCP/IP för utvecklare-lektionen?
Ja. Varje Linux-nätverk och TCP/IP för utvecklare-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Bash-skript för nätverk
- Python för nätverksautomation
- REST API:er för nätverksenheter
- Nätverkskonfiguration med Ansible