Frage

Ich habe versucht, einige Konfigurationssicherungen auf meinem Cisco-Geräten zu automatisieren, habe ich es geschafft, bereits das Skript zu tun, die die Aufgabe erfüllt, aber ich versuche, es zu verbessern Fehler zu behandeln.

Ich denke, das ist notwendig, um die Fehler auf zwei Schritte zu fangen, zuerst kurz nach dem ‚\‚$ Pass \ r \‘senden‘ Login-Fehler zu erhalten (Zugriffsnachrichten verweigert) und an den ‚erwartet \‚: \ end‘ 'Linie, sicher sein, dass die ausgegebenen Befehle konnten die Konfiguration aus dem Gerät ziehen.

Ich habe einige Möglichkeiten gesehen, es zu tun, wenn Sie auf einem erwartet Skript arbeiten, aber ich mag eine Bash-Skript verwenden, um die Lage sein, eine Liste der Geräte aus einer TXT-Datei zu liefern.

#!/bin/bash

data=$(date +%d-%m-%Y)
dataOntem=$(date +%d-%m-%Y -d "-1 day")
hora=$(date +%d-%m-%Y-%H:%M:%S)
log=/firewall/log/bkpCisco.$data.log
user=MYUSER
pass=MYPASS

for firewall in `cat /firewall/script/firewall.cisco`
do

VAR=$(expect -c "
spawn ssh $user@$firewall
expect \"assword:\"
send \"$pass\r\"
expect \">\"
send \"ena\r\"
expect \"assword:\"
send \"$pass\r\"
expect \"#\"
send \"conf t\r\"
expect \"conf\"
send \"no pager\r\"
send \"sh run\r\"
log_file -noappend /firewall/backup/$firewall.$data.cfg.tmp
expect \": end\"
log_file
send \"pager 24\r\"
send \"exit\r\"
send \"exit\r\"
")

echo "$VAR"
done
War es hilfreich?

Lösung

Sie müssen alternative Muster in den erwarten Aussagen, wo Sie Fehler fangen wollen. Wenn Sie sich für eine bestimmte Fehlermeldung suchen, können Sie festlegen, dass alternativ nur einen Timeout-Handler angeben, die schließlich ausgelöst wird, wenn die normale Ausgabe ausbleibt.

Eg. nach send \"$pass\r\" statt expect \">\" Versuch:

expect \">\" {} timeout {puts stderr {Could not log in}; exit}

dh. wenn die erwartete Ausgabe kommt vor dem Timeout (default 10 sec) nichts tun, und weiter, sonst beschweren und Verlassen erwarten. Sie könnten auch ein EOF Muster benötigen, den Fall zu passen, wo Ihre SSH-Sitzung endet. Beachten Sie, dass da Sie keine Variablensubstitution tun in erwarten, brauchen Sie nicht \ „\“ um die Saiten, können Sie {} oder gar nichts, wenn es ein Wort ist, zum Beispiel. expect conf und send {no pager}.

BTW bin ich mit bstpierre, dass dieser Reiniger wäre, wenn Sie bash fallen gelassen und hat das Ganze in erwarten, aber wenn bash hat den Zweck erfüllt, die in Ordnung ist.

Andere Tipps

Wenn Sie nicht einfache Anführungszeichen verwenden (expect -c '...'), dann sind die alle $ Variablen werden durch bash ersetzt werden nicht erwartet. Kann einfacher sein, die erwarten, dass Code in einer separaten Datei zu setzen, oder vielleicht eine heredoc.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top