Zum Inhalt springen Weiter zur Suche
Testversion
Blog

Verwaltung von Netzwerkgeräten mit SSH-Skripten

Netz- und Sicherheitsgeräte verfügen in der Regel über eine textbasierte Verwaltungsschnittstelle oder eine Befehlszeilenschnittstelle (Command Line Interface, CLI), die den Zugriff auf Systeme über eine Netzverbindung und deren Verwaltung ermöglicht. CLI-Befehle werden in der Regel von textbasierten Terminals aus ausgeführt. Diese Systeme können auch mit in Skripten eingebetteten CLI-Befehlen verwaltet werden. Dieser Artikel beschreibt die Verwaltung von Netzwerkgeräten mit Linux-Skripten.

Während moderne DevOps-Umgebungen Software-Tools wie Ansible, Chef und Puppet zur Verwaltung und Bereitstellung von Netzwerksystemen einsetzen, sind diese Systeme komplex und strukturiert. Oft können einfache (oder sogar fortgeschrittene) Ad-hoc-Verwaltungsaufgaben in wenigen Minuten mit Linux-Bash-Skripten erstellt werden. Linux-Skripte sind eine komfortable Umgebung und werden von den meisten Administratoren täglich verwendet.

Für die folgenden Beispiele werden wir das Linux Expect Skriptprogramm verwenden. Expect ist ein weit verbreitetes und beliebtes Werkzeug, das es seit über 20 Jahren gibt. Es wurde entwickelt, um CLI-basierte Systeme zu verwalten, in der Regel Linux-Shells wie bash, csh, etc.

Der Zugriff auf Systeme über ein Netzwerk erfolgt über das SSH-Protokoll. Linux Expect verfügt über eine integrierte Unterstützung für SSH, die mit einem einzigen Befehl definiert werden kann.

HINWEIS: Expect kann auf Linux- und Windows-Systemen installiert werden.

Beispiel für ein CLI-Verwaltungsskript

Das hier enthaltene Beispiel ist ein benutzerdefiniertes Skript für eine A10 Networks Thunder Hardware oder virtuelle Appliance. Das Skript kann für andere Netzwerk- und Sicherheitssysteme wie Cisco, Juniper usw. angepasst werden.

Der folgende Code ist ein Linux-Expect-Skript, das:

  1. Anmeldung bei einem A10 Networks Thunder System über SSH
  2. Aufrufen des Konfigurationsmodus
  3. Wiederherstellung des Geräte-Images von einem FTP-Server
  4. Das System neu starten
  5. Ausfahrt

Code-Muster

#!/usr/bin/expect -f

#SSH script to restore Thunder ACOS devices from a system backup.

set HOSTIP [lindex $argv 0]
set BKPATH [lindex $argv 1]

spawn ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no admin@$HOSTIP

expect "Password"
send "a10\r"

expect ">"
send "enable\r"
expect "Password"
send "\r"
expect "#"

send "configure\r"
expect "(config)"

send "restore ftp://root@vServer7.ebc.local/$BKPATH\r"
expect "Password"
send "a102345\r"

expect "skip port map"
send "yes\r"

expect "see the diff"
send "no\r"

expect "Complete the restore"
send "yes\r"

sleep 1
expect "Proceed with reboot"
send "yes\r"

expect eof

Code Breakout

Im Folgenden werden die Codeabschnitte des obigen Beispiels erläutert.

#!/usr/bin/expect -f

Expect ist keine Standard-Shell und muss explizit referenziert werden.

set HOSTIP [lindex $argv 0]
set BKPATH [lindex $argv 1]

Um das Dienstprogramm zu verallgemeinern, können Parameter an Expect-Skripte übergeben werden. In diesem Beispiel werden die IP-Adresse und der Pfad zur Sicherungsbibliothek an das Skript übergeben.

spawn ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no admin@$HOSTIP

Melden Sie sich mit SSH am entfernten System an. Diese Syntax ermöglicht es dem Skript, sich am entfernten System anzumelden und mit der Verarbeitung der nächsten Befehle fortzufahren.


expect "Password"
send "a10\r"

expect ">"
send "enable\r"
expect "Password"
send "\r"
expect "#"

Mit dem Befehl [expect] wird das Skript angehalten, bis der genaue Text empfangen wird.

Der Befehl [send] sendet den zitierten Text. Der Return-Tastendruck muss explizit angegeben werden.

send "configure\r"
expect "(config)"

Aktivieren Sie das Gerät im Modus [Konfiguration].

send "restore ftp://root@vServer7.ebc.local/$BKPATH\r"
expect "Password"
send "a102345\r"

Führen Sie den FTP-CLI-Befehl des Geräts aus, um das Sicherungsimage abzurufen.

expect "skip port map"
send "yes\r"

expect "see the diff"
send "no\r"

expect "Complete the restore"
send "yes\r"

Die Geräte-CLI-Umgebung erfordert zusätzliche Frage- und Antwort-Interaktionen.

sleep 1
expect "Proceed with reboot"
send "yes\r"

In einigen Fällen kann der Befehl sleep verwendet werden. Nach dem Befehl [send] leitet das Gerät eine Neustartsequenz ein.

expect eof

Dieser letzte Befehl ist erforderlich. Wenn er nicht enthalten ist, wird das Expect-Skript beendet, bevor der CLI-Befehl reboot abgeschlossen ist, wodurch der Neustart fehlschlägt.