SwitchConfigFetcher

Handbuch · Version 1.0 · kostenlos von codekunst systems GmbH

1. Was das Programm macht

SwitchConfigFetcher meldet sich per SSH oder Telnet an Ihren Netzwerk-Switchen an, ruft die Konfiguration und einige Diagnose-Ausgaben ab und legt alles als Textdateien ab. So haben Sie jederzeit einen aktuellen Stand Ihrer Geräte, auch wenn einmal ein Switch ausfällt oder jemand etwas verstellt.

Zum Windows-WarnhinweisDas Programm ist nicht mit einem Zertifikat signiert. Windows SmartScreen kann deshalb beim ersten Start warnen („Weitere Informationen“ → „Trotzdem ausführen“). Die Prüfsumme der Datei steht in SHA256SUMS.txt; mit Get-FileHash .\SwitchConfigFetcher.exe können Sie sie vergleichen.

2. Schnellstart in sechs Schritten

Öffnen Sie eine PowerShell im Ordner mit der SwitchConfigFetcher.exe. Wir empfehlen, die Datei nach C:\Tools\SwitchConfigFetcher\ oder C:\Program Files\codekunst systems GmbH\SwitchConfigFetcher\ zu legen.

  1. Ordner anlegen lassen.
    .\SwitchConfigFetcher.exe init
    Das legt C:\ProgramData\codekunst systems GmbH\SwitchConfigFetcher\ an (Konfiguration, Ausgabe, Logs) und schreibt eine Start-config.json. Einen anderen Ort wählen Sie mit init --root D:\SCF.
  2. Konfiguration vorbereiten. Nehmen Sie eine der Beispieldateien aus dem Ordner samples (siehe Abschnitt 3), tragen Sie Ihre Switche ein und speichern Sie sie als config.json in den Ordner aus Schritt 1.
  3. Passwort setzen (verdeckte Eingabe, wird sofort verschlüsselt):
    .\SwitchConfigFetcher.exe set-password --all
    .\SwitchConfigFetcher.exe set-password --ip 10.0.1.1 --enable
    Das erste Kommando setzt das Login-Passwort für alle Switche, das zweite das Enable-Passwort eines einzelnen Geräts.
  4. Konfiguration prüfen.
    .\SwitchConfigFetcher.exe validate-config
    .\SwitchConfigFetcher.exe list
    Meldet OK, wenn alles passt, sonst eine verständliche Fehlermeldung.
  5. Probelauf ohne Verbindung.
    .\SwitchConfigFetcher.exe --dry-run
    Zeigt nur, welche Geräte abgefragt würden. Es wird keine Verbindung aufgebaut.
  6. Erster echter Lauf, zunächst mit einem einzelnen Gerät:
    .\SwitchConfigFetcher.exe --ip 10.0.1.1 --verbose
    Die Ergebnisse liegen danach unter ...\SwitchConfigFetcher\output\10.0.1.1\<Datum_Uhrzeit>\. Läuft das, rufen Sie ohne --ip alle Geräte ab.
Vorsicht bei falschen ZugangsdatenViele Switche sperren einen Benutzer nach wenigen fehlgeschlagenen Anmeldungen. Testen Sie deshalb zuerst mit einem einzelnen Gerät, bevor Sie alle abrufen.

3. Die Konfiguration

Die Datei config.json ist eine normale JSON-Datei. Zeilenkommentare (// ...) und ein Komma am Zeilenende sind erlaubt. Im Ordner samples liegen vier Vorlagen:

DateiInhalt
config.example.jsonMinimalbeispiel mit einem Cisco-Switch
config.cisco.example.jsonCisco: Standard-IOS, Catalyst 1000, Telnet-Altgerät, deaktivierter Switch
config.multivendor.example.jsonje ein Gerät für HP, Aruba, Extreme, MikroTik, UniFi und Cisco
config.vendor-override.example.jsonzusätzliche Befehle für ein Profil (siehe Abschnitt 8)

Die Beispiele sind absichtlich nicht lauffähig: Solange bei passwordEncrypted noch REPLACE_WITH_OUTPUT_OF_encrypt_COMMAND steht, bricht das Programm ab. So läuft nichts versehentlich mit falschen Zugangsdaten gegen Ihre Geräte.

Ein Switch-Eintrag

{
  "ip": "10.0.1.1",                  // Pflicht, zugleich Name des Ausgabeordners
  "hostname": "core-sw-01",          // optional, nur für Anzeige und Logs
  "group": "core",                   // optional, für --group
  "vendor": "cisco-ios",             // Pflicht, Name eines Profils (Abschnitt 8)
  "protocol": "ssh",                 // "ssh" oder "telnet"
  "port": 22,                        // optional (Standard: SSH 22, Telnet 23)
  "username": "admin",               // Pflicht
  "passwordEncrypted": "AQAAANCM...",       // wird von set-password eingetragen
  "enablePasswordEncrypted": "AQAAANCM...", // nur bei Geräten mit Enable-Stufe
  "enabled": true                    // false = Switch überspringen
}

Einstellungen für den Lauf

BereichFeldBedeutung (Standard)
outputbasePathWurzel für die Ergebnisse (...\SwitchConfigFetcher\output)
timestampFormatFormat des Zeitstempel-Ordners (yyyy-MM-dd_HHmm)
executionmaxParallelWie viele Geräte gleichzeitig abgefragt werden (5 im Beispiel)
connectTimeoutSecondsWartezeit für den Verbindungsaufbau in Sekunden (15)
commandTimeoutSecondsWartezeit auf die Antwort je Befehl in Sekunden (60)
logginglevelAusführlichkeit auf der Konsole: Trace, Debug, Information, Warning, Error, Critical (Information)
filePathLog-Datei; {yyyy-MM-dd} wird durch das Datum ersetzt

4. Passwörter und Sicherheit

So kommt ein Passwort in die Konfiguration

Der empfohlene Weg ist set-password. Es fragt das Passwort verdeckt ab (zur Kontrolle zweimal), verschlüsselt es mit Windows-DPAPI und trägt nur den verschlüsselten Wert in die config.json ein. Das Klartext-Passwort steht weder in einer Datei noch in der PowerShell-Verlaufsliste noch in der Prozessliste.

KommandoWirkung
set-password --allLogin-Passwort für alle Switche (gleiches Passwort)
set-password --ip 10.0.1.1,10.0.1.2nur für diese Geräte
set-password --group corefür alle Geräte einer Gruppe
set-password --group core --enablesetzt das Enable-Passwort statt des Login-Passworts
encryptgibt nur den verschlüsselten Wert aus (verdeckte Eingabe), den Sie selbst einfügen

Vor jeder Änderung legt set-password eine Sicherung als config.json.bak an. Weil die Datei dabei neu geschrieben wird, gehen Kommentare in der config.json verloren. Die Sicherung enthält sie noch.

Wie sicher ist das?

Telnet ist unverschlüsseltBei Telnet gehen Benutzername und Passwort im Klartext über das Netz. Verwenden Sie Telnet nur in einem abgesicherten Management-Netz und stellen Sie die Geräte nach Möglichkeit auf SSH um.
SSH-Hostschlüssel werden nicht geprüftDas Programm vergleicht den Hostschlüssel der Geräte nicht mit einem bekannten Wert. Ein Angreifer im selben Netz könnte sich bei einer SSH-Verbindung als Switch ausgeben. Setzen Sie das Programm daher in einem vertrauenswürdigen Management-Netz ein.

5. Befehle

AufrufWirkung
SwitchConfigFetcher.exealle aktivierten Switche abrufen
--ip 10.0.1.1 oder --ip 10.0.1.1,10.0.2.5nur diese Geräte
--group corenur eine Gruppe
--parallel 10Parallelität für diesen Lauf ändern
--dry-runPlan anzeigen, ohne Verbindung
--verboseDetail-Ausgabe auf der Konsole
--config D:\andere.jsonandere Konfigurationsdatei verwenden
init [--root <Ordner>] [--no-sample]Ordner und Start-Konfiguration anlegen (überschreibt nichts)
set-password ...Passwort verschlüsselt eintragen (siehe Abschnitt 4)
encryptPasswort verschlüsseln und den Wert ausgeben
listalle konfigurierten Switche als Tabelle
validate-configKonfiguration prüfen (Aufbau, doppelte IPs, unbekannte Profile, offene Platzhalter)
--help, --versionHilfe, Versionsnummer

6. Ergebnis, Logs und Rückgabewerte

Pro Lauf und Gerät entsteht ein Ordner mit Zeitstempel:

output\
└── 10.0.1.1\
    ├── 2026-10-01_0230\
    │   ├── running-config.txt
    │   ├── version.txt
    │   ├── interfaces.txt
    │   ├── mac-table.txt
    │   └── vlans.txt
    └── 2026-10-02_0230\ ...
RückgabewertBedeutung
0alles in Ordnung (auch Probelauf und init)
1Fehler in Konfiguration oder Aufruf
2mindestens ein Gerät ist fehlgeschlagen, die anderen waren erfolgreich

7. Täglich automatisch laufen lassen

Das Programm hat keinen eigenen Zeitplan. Nutzen Sie dafür die Windows-Aufgabenplanung, zum Beispiel jede Nacht um 02:30 Uhr:

$exe = "C:\Tools\SwitchConfigFetcher\SwitchConfigFetcher.exe"
$action    = New-ScheduledTaskAction -Execute $exe
$trigger   = New-ScheduledTaskTrigger -Daily -At 02:30
$principal = New-ScheduledTaskPrincipal -UserId "SYSTEM" -LogonType ServiceAccount -RunLevel Highest
$settings  = New-ScheduledTaskSettingsSet -StartWhenAvailable -DontStopOnIdleEnd
Register-ScheduledTask -TaskName "SwitchConfigFetcher" -Action $action -Trigger $trigger -Principal $principal -Settings $settings

8. Hersteller-Profile anpassen

Ein Profil beschreibt, wie das Programm mit einem Gerätetyp spricht: Prompts, Anmeldung, abzufragende Befehle, Abmeldung. Im Feld vendor eines Switch-Eintrags steht der Name des Profils.

ProfilSSHTelnetHinweis
cisco-iosjajaStandard-Cisco (Catalyst, ISR, IOS-XE), mit Enable-Stufe
cisco-ios-legacyneinjaalte Cisco-Geräte nur mit Passwort, ohne Benutzername
cisco-ios-c1000jajaCisco Catalyst 1000
cisco-ios-c1000-oemjajaCisco-kompatible Geräte mit abweichender Oberfläche
hp-procurvejajaHP ProCurve; bei Telnet mit Schritt „beliebige Taste“
aruba-aoscxjajaAruba AOS-CX
extreme-exosjajaExtreme Networks EXOS
mikrotikjaneinRouterOS; Anmeldung erledigt SSH selbst
unifijaneinUbiquiti UniFi mit SSH-Shell
Erprobt und nicht erprobtDie Profile sind auf typische Geräte und Firmware-Stände abgestimmt, aber nicht jedes Modell lässt sich testen. Wenn ein Gerät anders antwortet (anderer Prompt, andere Befehle), lässt sich das Profil in der Konfiguration anpassen (siehe unten). Testen Sie neue Gerätetypen zuerst mit --ip <Adresse> --verbose.

Befehle ergänzen oder ändern

Die eingebauten Profile sehen Sie nach init im Ordner profiles neben der config.json (nur zur Ansicht, das Programm verwendet die eingebauten). Änderungen gehören in vendorOverrides der config.json:

"vendorOverrides": {
  "cisco-ios": {
    "ssh": {
      "commands": [
        { "name": "running-config", "send": "show running-config",        "expect": "privExec" },
        { "name": "version",        "send": "show version",               "expect": "privExec" },
        { "name": "cdp-neighbors",  "send": "show cdp neighbors detail",  "expect": "privExec" }
      ]
    }
  }
}

9. Fehlersuche

Starten Sie immer zuerst mit .\SwitchConfigFetcher.exe --ip <Adresse> --verbose und öffnen Sie daneben die Log-Datei.

MeldungUrsache und Lösung
passwordEncrypted is still a placeholderEs steht noch REPLACE_WITH_... in der Konfiguration. set-password ausführen (bei Enable-Passwort mit --enable) oder den Eintrag mit "enabled": false deaktivieren.
could not be decrypted on this hostDie Passwörter wurden auf einem anderen Rechner verschlüsselt. set-password auf diesem Rechner erneut ausführen.
Unknown vendor profile '...'Der Wert bei vendor ist kein Profilname. Schreibweise mit der Tabelle in Abschnitt 8 vergleichen.
Profile '...' has no 'telnet' sectionDieses Profil gibt es nur per SSH (MikroTik, UniFi). "protocol": "ssh" verwenden.
SSH: Permission deniedAnmeldung abgelehnt. Mit PuTTY oder ssh mit genau denselben Zugangsdaten testen; Groß- und Kleinschreibung des Passworts beachten.
read timed out waiting for ...Das Programm wartet auf einen Prompt, bekommt aber etwas anderes. In der Log-Datei stehen die letzten 200 empfangenen Zeichen. Häufig: falsches Passwort (% Bad passwords), Gerät ohne Enable-Stufe (anderes Profil wählen) oder ein Banner mit Zusatzabfrage.
Ein Gerät hängtNach commandTimeoutSeconds gilt es als fehlgeschlagen, die anderen laufen weiter. Rückgabewert dann 2.

10. Lizenz, Haftung, Kontakt