Site icon bintorosoft.com

13.1 Mit Python-Skripten eine Verbindung zu Netzwerkgeräten herstellen

focus on tablet and hands of Network Engineer IT technician Monitoring Data in futuristic Server Room holding smart phone digital ai tablet technology improving cyber security in blue lit room, copy space empty blank caption space on the side --chaos 30 --ar 16:9 --v 6.1 Job ID: e308bb98-4ff3-4162-9b1a-c98c6866910f

Der erste praktische Schritt in der Netzwerkautomatisierung besteht fast immer darin, mit einem Python-Skript eine stabile Verbindung zu einem Netzwerkgerät aufzubauen. Genau an dieser Stelle entscheidet sich oft, ob ein Automatisierungsansatz im Alltag funktioniert oder schon in den Grundlagen scheitert. Für Network Engineers ist dieser Schritt besonders wichtig, weil er die Brücke zwischen klassischer Geräteverwaltung per CLI und moderner, wiederholbarer Automatisierung bildet. Eine saubere Verbindung zu Routern, Switches oder Firewalls ist die Voraussetzung dafür, Show-Befehle auszuführen, Konfigurationsstände auszulesen, Änderungen kontrolliert auszurollen oder strukturierte Daten über APIs abzufragen. Wer diesen Verbindungsaufbau mit Python versteht, legt damit das technische Fundament für fast alle weiteren Automatisierungsaufgaben im Netzwerk.

Warum der Verbindungsaufbau der wichtigste erste Schritt ist

Ohne stabile Session keine verlässliche Automatisierung

Bevor ein Python-Skript einen einzigen Show-Befehl ausführt oder eine Konfigurationszeile sendet, muss es das Zielgerät sicher und reproduzierbar erreichen. Genau diese scheinbar einfache Aufgabe ist im Netzwerkbetrieb kritischer, als sie auf den ersten Blick wirkt. Eine unzuverlässige Verbindung, falsche Authentifizierung oder ungeprüfte Host-Erreichbarkeit führt schnell zu Fehlern, Timeouts oder unvollständigen Ergebnissen.

Gerade in produktiven Umgebungen reicht es deshalb nicht aus, „irgendwie“ eine Verbindung herzustellen. Ein guter Verbindungsaufbau berücksichtigt Plattformtyp, Authentifizierung, Transportprotokoll, Fehlerbehandlung und saubere Sitzungsbeendigung.

Die Verbindung ist mehr als nur ein Login

Viele Einsteiger denken bei Automatisierung zunächst an das bloße Anmelden per SSH. In der Praxis umfasst der Verbindungsaufbau jedoch deutlich mehr:

Erst wenn diese Grundlagen sauber umgesetzt sind, wird aus einem einfachen Python-Skript ein belastbarer Baustein für den Netzwerkbetrieb.

Welche Verbindungsarten in der Netzwerkautomatisierung typisch sind

SSH als klassischer Standard

In vielen Enterprise-Netzen ist SSH weiterhin der häufigste Weg, um Netzwerkgeräte automatisiert anzusprechen. Das gilt besonders für klassische CLI-orientierte Plattformen wie Router und Switches, auf denen Show-Befehle und Konfigurationsmodi über die Kommandozeile genutzt werden.

Typische CLI-Voraussetzungen auf einem Cisco-Gerät:

ip domain-name example.local
crypto key generate rsa modulus 2048
ip ssh version 2

line vty 0 4
 transport input ssh
 login local
 exec-timeout 10 0

Diese Konfiguration stellt sicher, dass das Gerät überhaupt per SSH erreichbar ist und nur sichere Management-Zugriffe akzeptiert.

API-basierte Verbindungen

Neben SSH werden moderne Netzwerkgeräte zunehmend auch über APIs angesprochen. Dazu gehören REST-APIs, RESTCONF, NETCONF oder Controller-Schnittstellen. Für den Einstieg in Python-basierte Netzwerkautomatisierung bleibt SSH zwar meist der erste Schritt, aber Engineers sollten den Unterschied kennen: Bei SSH wird meist CLI-Text verarbeitet, bei APIs eher strukturierte Daten.

Für das Thema „Verbindung zu Netzwerkgeräten herstellen“ ist SSH der häufigste praktische Einstieg, weil es in bestehenden Umgebungen fast immer verfügbar ist.

Python-Bibliotheken für den Verbindungsaufbau

Netmiko als praktischer Standard für Netzwerker

Für den SSH-basierten Zugriff auf klassische Netzwerkgeräte ist Netmiko eine der wichtigsten und einfachsten Python-Bibliotheken. Sie abstrahiert viele SSH-Details und ist speziell auf Netzwerkplattformen zugeschnitten. Das macht sie für Network Engineers deutlich zugänglicher als allgemeine SSH-Bibliotheken.

Ein minimales Beispiel:

from netmiko import ConnectHandler

device = {
    "device_type": "cisco_ios",
    "host": "192.0.2.10",
    "username": "admin",
    "password": "password"
}

with ConnectHandler(**device) as conn:
    output = conn.send_command("show ip interface brief")
    print(output)

Dieses Skript stellt eine Verbindung her, führt einen Show-Befehl aus und gibt die Antwort zurück. Für viele Engineers ist genau das der ideale Einstieg in Python-basierte Gerätekommunikation.

Paramiko für mehr Low-Level-Kontrolle

Paramiko ist eine allgemeinere SSH-Bibliothek. Sie bietet mehr technische Kontrolle, ist aber weniger komfortabel für typische Netzwerkaufgaben. Wer spezielle SSH-Interaktionen oder sehr eigene Workflows bauen will, kann Paramiko nutzen. Für den schnellen produktiven Einstieg im Netzwerk ist Netmiko meist praktischer.

Ein einfaches Paramiko-Beispiel:

import paramiko

client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect("192.0.2.10", username="admin", password="password")

stdin, stdout, stderr = client.exec_command("show version")
print(stdout.read().decode())

client.close()

Hier sieht man gut: Paramiko arbeitet stärker auf SSH-Ebene, während Netmiko bereits viele Netzwerkbesonderheiten berücksichtigt.

Requests für API-Verbindungen

Wenn statt SSH eine HTTP- oder REST-API genutzt wird, ist Requests häufig die passende Python-Bibliothek. Sie wird weniger für klassische CLI-Gerätekommunikation genutzt, aber sehr häufig für Controller, Management-Plattformen oder RESTCONF-nahe Workflows.

Ein einfaches Beispiel:

import requests

url = "https://192.0.2.50/api/v1/devices"
response = requests.get(url, auth=("admin", "password"), verify=False)

print(response.status_code)
print(response.text)

Für das Grundverständnis gilt:

Welche Informationen ein Python-Skript für die Verbindung braucht

Zieladresse und Plattformtyp

Damit ein Skript ein Netzwerkgerät korrekt ansprechen kann, braucht es mindestens eine Zieladresse und Wissen darüber, welche Plattform dort betrieben wird. Gerade bei Bibliotheken wie Netmiko ist der Plattformtyp entscheidend, weil sich CLI-Handling, Prompt-Erkennung und Session-Verhalten je nach Hersteller und Betriebssystem unterscheiden.

Ein Netmiko-Geräteobjekt enthält deshalb typischerweise:

device = {
    "device_type": "cisco_ios",
    "host": "192.0.2.10",
    "username": "admin",
    "password": "password"
}

Ohne korrektes device_type kann die Session trotz erreichbarem Host fehlschlagen oder unerwartet reagieren.

Benutzername, Passwort und Rechte

Ein Skript braucht außerdem gültige Zugangsdaten. Wichtig ist dabei nicht nur, dass der Login funktioniert, sondern auch, dass das Konto die nötigen Rechte für den geplanten Zweck besitzt.

Gerade für erste Tests wird oft ein einfacher lokaler Benutzer verwendet:

username admin privilege 15 secret StrongPassword123

In produktiven Umgebungen sollte die Authentifizierung jedoch möglichst über AAA, TACACS+ oder RADIUS sauber eingebunden sein.

Erste Verbindungstests sinnvoll vorbereiten

Erreichbarkeit vorab prüfen

Bevor Python-Code geschrieben oder ein Verbindungsfehler auf Bibliotheksebene analysiert wird, sollte immer geprüft werden, ob das Gerät grundsätzlich erreichbar ist. Viele vermeintliche Automatisierungsprobleme sind in Wirklichkeit einfache Netzwerkprobleme.

Typische lokale Prüfungen außerhalb des Geräts sind Ping, TCP-Port-Checks oder einfache SSH-Tests mit einem normalen Client.

SSH manuell testen

Ein sehr sinnvoller Schritt ist es, die Anmeldung zuerst manuell per SSH zu testen. Wenn der Benutzer sich interaktiv nicht anmelden kann, wird auch das Python-Skript scheitern. Der manuelle Test spart viel Zeit bei der Fehlersuche.

Erst wenn dieser Basistest erfolgreich ist, lohnt sich der nächste Schritt in Python.

Ein einfaches Netmiko-Skript sauber aufbauen

Minimalbeispiel mit Verbindung und Show-Befehl

Der klassische Einstieg besteht darin, ein Gerät zu verbinden und einen unkritischen Show-Befehl abzusetzen. Das folgende Beispiel ist bewusst einfach gehalten:

from netmiko import ConnectHandler

device = {
    "device_type": "cisco_ios",
    "host": "192.0.2.10",
    "username": "admin",
    "password": "password",
}

with ConnectHandler(**device) as conn:
    output = conn.send_command("show version")
    print(output)

Dieser Aufbau ist deshalb gut, weil er die wichtigsten Elemente bereits enthält:

Warum der with-Block sinnvoll ist

Der with-Block ist im Python-Kontext besonders nützlich, weil Ressourcen sauber freigegeben werden. Auch wenn ein Fehler im Skript auftritt, wird die Session in der Regel korrekt beendet. Das ist sauberer als ein manuelles Öffnen und Schließen der Verbindung an unterschiedlichen Stellen im Code.

Fehlerbehandlung beim Verbindungsaufbau

Warum robuste Fehlerbehandlung unverzichtbar ist

In Lab-Umgebungen funktionieren einfache Skripte oft sofort. In realen Netzwerken treten jedoch regelmäßig Probleme auf: falsche Passwörter, Timeouts, gesperrte Zugänge, Prompt-Probleme oder unterbrochene Sessions. Ein produktionsnahes Skript muss solche Fehler erkennen und sinnvoll behandeln.

Ein einfaches Beispiel mit Fehlerbehandlung:

from netmiko import ConnectHandler
from netmiko.exceptions import NetMikoTimeoutException, NetMikoAuthenticationException

device = {
    "device_type": "cisco_ios",
    "host": "192.0.2.10",
    "username": "admin",
    "password": "password",
}

try:
    with ConnectHandler(**device) as conn:
        output = conn.send_command("show ip interface brief")
        print(output)
except NetMikoAuthenticationException:
    print("Authentifizierung fehlgeschlagen.")
except NetMikoTimeoutException:
    print("Verbindung fehlgeschlagen oder Timeout erreicht.")
except Exception as e:
    print(f"Unerwarteter Fehler: {e}")

Damit wird das Skript deutlich robuster und im Fehlerfall besser nutzbar.

Warum saubere Fehlermeldungen so wichtig sind

Gerade wenn mehrere Geräte automatisiert angesprochen werden, reicht ein allgemeines „Script failed“ nicht aus. Gute Automatisierung muss verständlich sagen, warum ein Gerät nicht erreicht oder nicht verarbeitet werden konnte. Nur dann lassen sich Probleme gezielt korrigieren.

Sichere Behandlung von Zugangsdaten

Passwörter nicht hartkodieren

Für erste Beispiele wird das Passwort oft direkt im Python-Code hinterlegt. Für produktive Automatisierung ist das keine gute Praxis. Zugangsdaten sollten nicht im Klartext in Skripten, Git-Repositories oder geteilten Dateien gespeichert werden.

Ein einfaches Beispiel mit Passwortabfrage:

from getpass import getpass
from netmiko import ConnectHandler

password = getpass("Passwort eingeben: ")

device = {
    "device_type": "cisco_ios",
    "host": "192.0.2.10",
    "username": "admin",
    "password": password,
}

Das ist bereits deutlich besser als ein fest eingetragenes Passwort im Skript.

Service-Accounts bewusst einsetzen

Für wiederkehrende Automatisierung sollten nach Möglichkeit dedizierte Service-Accounts verwendet werden. Diese Konten sollten nur die Rechte erhalten, die für die jeweilige Aufgabe wirklich nötig sind.

Mehrere Geräte mit Python ansprechen

Von einem Gerät zur Gerätegruppe

Der nächste logische Schritt nach dem ersten Einzelgerät ist die Ausführung derselben Logik auf mehreren Geräten. Genau hier wird Python im Netzwerkalltag besonders nützlich.

Ein einfaches Beispiel mit einer Geräteliste:

from netmiko import ConnectHandler

devices = [
    {
        "device_type": "cisco_ios",
        "host": "192.0.2.10",
        "username": "admin",
        "password": "password",
    },
    {
        "device_type": "cisco_ios",
        "host": "192.0.2.11",
        "username": "admin",
        "password": "password",
    }
]

for device in devices:
    with ConnectHandler(**device) as conn:
        print(f"Verbunden mit {device['host']}")
        print(conn.send_command("show version"))

Damit wird aus einer einzelnen Session ein wiederverwendbarer Mechanismus für mehrere Geräte.

Warum Struktur bei mehreren Geräten wichtiger wird

Schon bei wenigen Geräten steigen die Anforderungen an saubere Datenhaltung, Fehlerbehandlung und Ergebnisdarstellung. Spätestens an diesem Punkt lohnt es sich, Inventardaten aus YAML- oder JSON-Dateien zu laden, statt alles direkt im Code zu hinterlegen.

Verbindung über APIs statt SSH

Wann APIs sinnvoller sind

Nicht jede Netzwerkautomatisierung sollte zwangsläufig über SSH laufen. Wenn Geräte oder Controller strukturierte APIs bereitstellen, kann das der bessere Weg sein. APIs sind besonders dann sinnvoll, wenn Daten bereits als JSON oder XML bereitgestellt werden oder wenn modellgetriebete Änderungen gewünscht sind.

Typische Aktivierung auf Cisco-Geräten:

conf t
ip http secure-server
restconf
netconf-yang
end

Diese Optionen erweitern den Verbindungsbegriff: Eine Verbindung kann eben nicht nur eine SSH-CLI-Session sein, sondern auch eine strukturierte API-Session.

Praktische Einordnung für den Einstieg

Für den praktischen Start ist SSH mit Netmiko meist einfacher, weil viele Engineers die CLI und das Verhalten der Geräte bereits kennen. APIs werden besonders interessant, wenn strukturierte Daten, Controller-Integration oder modellgetriebete Workflows wichtig werden.

Typische Fehler beim ersten Verbindungsaufbau

Falscher device_type

Ein häufiger Fehler bei Netmiko ist die falsche Plattformangabe. Wenn ein Gerät als cisco_ios definiert wird, obwohl es sich in Wirklichkeit um NX-OS oder eine andere Plattform handelt, kann die Verbindung fehlschlagen oder sich unerwartet verhalten.

Passwortprobleme und unklare Rechte

Ein Login kann technisch funktionieren, aber für bestimmte Befehle fehlen dennoch Rechte. Das ist besonders relevant, wenn ein Skript später nicht nur lesen, sondern auch konfigurieren soll.

Keine saubere Session-Beendigung

Wer Verbindungen nicht sauber schließt, riskiert unnötige Session-Leichen, offene Verbindungen oder schwer nachvollziehbare Seiteneffekte. Genau deshalb sind saubere Kontextmanager oder explizite Close-Operationen wichtig.

Keine Prüfung der Management-Grundlagen

Viele Einsteiger beginnen sofort mit Python-Code, obwohl die Managementbasis auf dem Gerät selbst nicht stimmt. SSH nicht aktiviert, lokale Benutzer fehlen, VTY-Zugriffe sind durch ACLs blockiert oder die Management-IP ist falsch geroutet. Solche Grundlagen müssen vor dem Skript geprüft werden.

Best Practices für Python-Verbindungen zu Netzwerkgeräten

Damit wird aus dem ersten Python-Skript mehr als nur ein schneller Test: Es entsteht ein belastbarer Einstieg in die Netzwerkautomatisierung, bei dem Verbindungsaufbau, Sicherheit, Fehlerbehandlung und saubere Struktur von Anfang an mitgedacht werden. Genau diese Grundlagen entscheiden später darüber, ob Automatisierung im Netzwerk nur im Lab funktioniert oder auch im produktiven Betrieb zuverlässig nutzbar ist.

Konfiguriere Cisco Router & Switches und liefere ein Packet-Tracer-Lab/GNS3

Ich biete professionelle Unterstützung im Bereich Netzwerkkonfiguration und Network Automation für private Anforderungen, Studienprojekte, Lernlabore, kleine Unternehmen sowie technische Projekte. Ich unterstütze Sie bei der Konfiguration von Routern und Switches, der Erstellung praxisnaher Topologien in Cisco Packet Tracer, dem Aufbau und Troubleshooting von GNS3- und EVE-NG-Labs sowie bei der Automatisierung von Netzwerkaufgaben mit Netmiko, Paramiko, NAPALM und Ansible. Kontaktieren Sie mich jetzt – klicken Sie hier.

Meine Leistungen umfassen:

Benötigen Sie Unterstützung bei Ihrem Netzwerkprojekt, Ihrer Simulation oder Ihrer Network-Automation-Lösung? Kontaktieren Sie mich jetzt – klicken Sie hier.

Exit mobile version