Terminalfenster mit LLDP-Scan, verbunden mit Switches unter AOS6, AOS8 und EXOS

SSH Command & LLDP Tool: Switches zentral verwalten und Portbeschreibungen automatisch pflegen

Wer regelmäßig Netzwerkswitche betreut, kennt das Problem: Auf einem Port hängt ein Access Point, am nächsten ein Telefon und irgendwo dazwischen ein weiterer Switch. Die Geräte melden sich per LLDP oft schon mit ihrem Namen – nur die Portbeschreibungen passen nicht dazu. Und wenn auf mehreren Switches dieselben Befehle ausgeführt werden sollen, beginnt die nächste Runde Copy & Paste.

Genau für solche Aufgaben habe ich mein SSH Command & LLDP Tool in Python entwickelt. Es läuft lokal auf meinem Rechner, verbindet sich per SSH mit den Netzwerkgeräten und vereint zwei Funktionen: CLI-Befehle auf mehreren Switches ausführen und Portbeschreibungen anhand von LLDP-Informationen prüfen und aktualisieren.

Vom ALE-LLDP-Alias-Skript zur lokalen Anwendung

In meinem früheren Beitrag zur automatischen Portbenennung mit LLDP auf Alcatel-Lucent Enterprise Switches habe ich bereits beschrieben, wie sich LLDP-Nachbarn für die Pflege von Port-Aliasen nutzen lassen.

Der Ansatz funktioniert, hat aber im Alltag einen Haken: Das damalige Python-Skript wird direkt auf dem Switch ausgeführt. Bei ALE-Switches mit AOS8 ist Python verfügbar, bei AOS6 dagegen nicht. In Kundennetzwerken mit unterschiedlichen Switch-Generationen ist das keine besonders elegante Grundlage für eine einheitliche Lösung.

Deshalb wollte ich die Logik vom Switch auf meinen eigenen Rechner verlagern. Das neue Tool benötigt kein Python auf dem Netzwerkgerät. Stattdessen spricht es die vorhandene CLI über SSH an. So kann ich AOS6- und AOS8-Switche aus einer Oberfläche heraus bearbeiten und zusätzlich Extreme Networks EXOS einbeziehen.

Ein weiterer Vorteil: Ich muss nicht auf jedem Gerät Skripte ablegen, starten oder pflegen. Eine lokale Anwendung reicht – und ich sehe vor der Übernahme, was geändert werden soll.

Was kann das Tool?

1. SSH-Befehle auf mehreren Switches ausführen

Im SSH-Bereich kann ich eine Liste von IP-Adressen oder einen IP-Bereich angeben und beliebige CLI-Befehle hinterlegen. Das Tool verbindet sich mit den Geräten und arbeitet die Befehle ab. Die Anzahl paralleler Sitzungen ist einstellbar; standardmäßig sind es fünf.

Praktisch ist das beispielsweise, wenn ich auf mehreren Geräten denselben Status abfragen oder eine geplante Aktion ausführen möchte. Für die Anmeldung können Zugangsdaten und alternative Anmeldedaten hinterlegt werden. Die Ausgaben lassen sich pro Gerät protokollieren und exportieren.

Wichtig: Bestätigungsabfragen – etwa bei einem reboot – beantwortet das Tool auf Wunsch automatisch mit „y“. Vor dem Start sollte man die Befehlsliste deshalb unbedingt kontrollieren. Eine parallele Ausführung auf vielen Geräten ist schließlich nur dann angenehm, wenn es auch die richtigen Befehle sind.

2. LLDP-Nachbarn auslesen und Portbeschreibungen vergleichen

Der für mich spannendere Teil ist die LLDP-Funktion. Das Tool erkennt die unterstützte Switch-Plattform, liest die verfügbaren LLDP-Nachbarn und die bestehenden Portbeschreibungen beziehungsweise Aliase aus und stellt beides gegenüber.

Dadurch sehe ich auf einen Blick, welche Beschreibungen bereits passen und wo sich etwas geändert hat – etwa wenn ein Access Point ausgetauscht oder an einen anderen Port gesteckt wurde.

Aus dem Vergleich entstehen Änderungsvorschläge. Diese kann ich vor der Übernahme prüfen, einzelne Einträge auswählen und bei Bedarf manuell bearbeiten. Ein Scan allein verändert noch keine Switch-Konfiguration.

3. Änderungen gezielt übernehmen

Nach dem Scan entscheide ich, welche vorgeschlagenen Anpassungen tatsächlich übernommen werden sollen. Erst nach einer Bestätigung sendet das Tool die entsprechenden CLI-Befehle an die ausgewählten Switches und stößt das Speichern der Konfiguration an.

Einige Besonderheiten berücksichtigt die Vergleichslogik bereits:

  • Unveränderte Namen: Wenn die vorhandene Beschreibung zum erkannten Nachbarn passt, ist keine Anpassung erforderlich.
  • Geänderte LLDP-Namen: Bei Abweichungen wird eine Aktualisierung vorgeschlagen.
  • „Not-Advertised“: Meldet ein Nachbar keinen verwertbaren Namen, wird dieser Eintrag ignoriert.
  • Kein erkannter Nachbar: Ein fehlender LLDP-Nachbar führt nicht automatisch dazu, dass eine bestehende Beschreibung gelöscht wird.
  • Inaktive Ports: Für bestehende Beschreibungen kann ein angehängtes Fragezeichen als Hinweis vorgeschlagen werden.

Zusätzlich lassen sich Einträge manuell ändern oder zum Entfernen vormerken. Gerade bei Sonderfällen möchte ich nicht darauf angewiesen sein, dass eine automatische Erkennung immer die einzig richtige Entscheidung trifft.

Welche Switches werden unterstützt?

Aktuell sind im Skript folgende Plattformen für die LLDP-Verarbeitung implementiert:

  • Alcatel-Lucent Enterprise AOS6
  • Alcatel-Lucent Enterprise AOS8
  • Extreme Networks EXOS

Die Plattform wird automatisch erkannt, sodass auch gemischte Gerätelisten möglich sind. Die Befehle zur Abfrage und Änderung von Portbeschreibungen unterscheiden sich je nach Betriebssystem; diese Unterschiede behandelt das Tool intern.

Weitere Plattformen wie Fabric Engine oder Huawei VRP sind in der vorliegenden Version noch nicht für diese Funktion umgesetzt.

Installation und Start

Die Anwendung ist in Python geschrieben und nutzt Tkinter für die grafische Oberfläche sowie Paramiko für SSH. Wer das Skript direkt starten möchte, benötigt eine passende lokale Python-Installation.

Die Abhängigkeiten lassen sich im Verzeichnis mit der requirements.txt installieren:

python -m pip install -r requirements.txt

Anschließend wird die Anwendung gestartet:

python ssh_lldp_descriptor.py

Die mitgelieferte requirements.txt enthält Paramiko sowie PyInstaller. Letzteres ist für die Erstellung einer ausführbaren Anwendung vorgesehen und wird für den direkten Python-Start nicht benötigt.

Protokolle und Nachvollziehbarkeit

Bei Änderungen an Netzwerkgeräten möchte ich später nachvollziehen können, was passiert ist. Deshalb schreibt das Tool Ausgaben der SSH-Sitzungen mit und bietet Exportmöglichkeiten als Text beziehungsweise CSV. Für übernommene LLDP-Anpassungen wird außerdem ein Änderungsprotokoll im CSV-Format erstellt.

Das ersetzt kein vollständiges Konfigurationsmanagement und auch keine Prüfung der laufenden Konfiguration. Es hilft aber dabei, die durchgeführten Aktionen zu dokumentieren – besonders dann, wenn mehrere Geräte in einem Durchgang bearbeitet werden.

Ein paar technische Besonderheiten

Bei älteren Switches ist SSH nicht immer so unkompliziert, wie man es von aktuellen Systemen gewohnt ist. Das Skript enthält deshalb einen Kompatibilitätsmechanismus für ältere SSH-Algorithmen. Solche Ausnahmen sind für Bestandsnetze manchmal notwendig, sollten aber bewusst und möglichst nur in vertrauenswürdigen Managementnetzen eingesetzt werden.

Gespeicherte Zugangsdaten werden unter Windows über DPAPI geschützt; für andere Plattformen ist eine Verschlüsselung mit Fernet vorgesehen. Trotzdem bleiben Zugangsdaten und Netzwerkzugriff sensible Themen. Außerdem akzeptiert die aktuelle SSH-Implementierung unbekannte Host-Schlüssel automatisch. Das ist bequem, ersetzt aber keine saubere Host-Key-Prüfung in sicherheitskritischen Umgebungen.

Auch die Portnamen haben plattformspezifische Grenzen: Bei EXOS berücksichtigt das Tool die begrenzte Länge der entsprechenden Beschreibungsfelder und kürzt Namen bei Bedarf.

Mein Fazit

Mit meinem ursprünglichen ALE-LLDP-Alias-Skript wollte ich vor allem die manuelle Pflege von Portbeschreibungen vereinfachen. Das funktioniert – allerdings nur dort, wo sich das Skript auch direkt auf dem Switch ausführen lässt.

Das SSH Command & LLDP Tool geht deshalb einen Schritt weiter: Python läuft lokal auf meinem Rechner, nicht auf jedem einzelnen Switch. Damit kann ich auch ältere AOS6-Geräte einbeziehen, AOS8 und EXOS aus derselben Oberfläche verwalten und vorgeschlagene Änderungen vor der Übernahme kontrollieren.

Mein Ziel ist dabei nicht, die Netzwerkkonfiguration möglichst blind zu automatisieren. Ich möchte wiederkehrende Arbeiten beschleunigen, ohne die Übersicht zu verlieren. Wenn dadurch weniger Zeit für Copy & Paste und mehr Zeit für die eigentliche Fehlersuche bleibt, hat sich die Entwicklung für mich schon gelohnt.

Wie handhabt ihr die Portbeschreibungen in euren Netzwerken? Pflegt ihr sie manuell, per LLDP oder bereits zentral über ein eigenes Tool?

Das Tool steht auf GitHub unter der MIT-Lizenz zur Verfügung: github.com/dgawin/ssh-command-and-lldp-tool.

Hinweis: Es handelt sich um ein privates Projekt, das weder mit Alcatel-Lucent Enterprise oder Extreme Networks noch mit meinem Arbeitgeber SPIE verbunden ist. Nutzung auf eigene Verantwortung – bitte Befehlslisten und Änderungsvorschläge vor der Übernahme immer prüfen.

Ähnliche Beiträge