HP ProCurve Switche Automatisches Backup der Konfiguration Version 1

Aus Znilwiki
Wechseln zu: Navigation, Suche

So, ich sollte mal eben schnell ein automatisches Backup für die Konfiguration von 3 HP-ProCurve Switchen bauen.
Ein "All-In-One" Tool hatte ich nicht gefunden, es gibt eine Windows-Lösung: https://github.com/agreenbhm/GhittoPCM die mir aber zu Aufwendig war bei der Einrichtung.

Ich bin dann bei dieser Lösung gelandet: http://www.lanbugs.de/netzwerktechnik/hp-procurve-bash-backup/

Und die habe ich wie folgt umgesetzt:



Ausgangslage

Kunde mit Windows-Umgebung wollte ein automatisches Backup seiner Switch-Konfiguration.
Es gab dann doch einen Linux-Server - den Zabbix-Server (geht auch mit Zabbix-Proxy)

Das Backup sollte aber auf einem Windows-Server landen.

Nachfolgend beschreibe wie ich

  • Auf dem Linux Server mir die Windows-Freigabe mounte
  • ein tägliches Backup der Switch-Konfiguration durchführe




Freigabe erstellen und beim Start mounten

Auf meinem Zielserver (Windows) habe ich die Freigabe SwitchConfigs erstellt und die Einstellungen so angepasst das der Domänenbenutzer "ZNIL\Administrator" auf diese Freigabe lesend und schreibend zugreifen kann.
Der Server hat die IP 192.168.1.111, die Freigabe heisst also

\\192.168.1.111\SwitchConfigs


Gemäß dieser Anleitung habe ich es so eingerichtet das diese Freigabe bei jedem Start des Linux-Servers(!) automatisch gemountet wird:

Der Pfad auf dem Linux-Server ist bei mir

/SwitchConfigs




Switche vorbereiten

Auf allen Switchen habe ich in den SNMP-Einstellungen eine neue Community-Group erstellt die lesend und Schreiben zugreifen darf.
Diese Gruppe heisst bei mir:

BackupConfig




Konfigurationsdatei erstellen

Auf dem Linux-Server erstellen wir nun eine Datei in der alle Switche stehen die gesichert werden sollen. Diese Packe ich direkt in den Pfad meines Sicherungsordners (die Datei liegt also in der Windows-Freigabe):

 nano /SwitchConfigs/HP-Switche.txt

mit folgendem Inhalt:

# Hostname,IP,SNMP-RW-Community, (r=running-config,s=startup-config,b=both)
SwitchServerraum,192.168.1.201,BackupConfig,r
SwitchHausA,192.168.1.202,BackupConfig,r
SwitchHausB,192.168.1.203,BackupConfig,r

Für jeden Switch eine neue Zeile!

  • 1. Eintrag ist der Name der zum speichern genommen werden soll
  • 2. Eintrag ist die IP-Adresse des Switches
  • 3. Eintrag ist der Name der Community-Group die wir auf den Switchen angelegt haben
  • 4. Eintrag besagt das wir die running-config haben wollne - also die gerade laufende Konfiguration




Sicherungsscript einrichten

Zunächst die Vorraussetzungen installieren:

apt-get install snmp tftp-hpa


Dann erstellen wir das Backup-Skript:

nano /SwitchConfigs/hp_load_cfg.sh

und kopieren das Skript von dieser Seite hinein: http://www.lanbugs.de/netzwerktechnik/hp-procurve-bash-backup/

Important.png
Hinweis: Das nachfolgende Script ist NICHT von mir sondern von Maximilian Thoma (siehe Link zuvor) - ich musste auch nichts ändern oder anpassen! Die Kopie auf meiner Seite ist eher ein "Backup" falls es die original Webseite mal nicht mehr geben sollte


Alternativ hier noch mal der Inhalt:

#!/bin/bash
 
#################################################################
# hp_load_cfg.sh - Load HP Procurve Configs via TFTP            #
#################################################################
# Version 1.0.0                                                 #
# Written by Maximilian Thoma (c) 2009 - admin@lanbugs.de       #
#################################################################
# for Ubuntu/Debian - needed snmp and tftp-hpa package          #
#################################################################
 
# Vars
DATE_TOKEN=$(date +"%Y-%m-%d-%H%M%S")
KUNDE=$(echo $1 | awk -F. '{print $1}')
 
declare K_DIR=$KUNDE
 
# Check ob Kundenverzeichnis existiert
if [ ! -e $K_DIR ]; then
mkdir $K_DIR; fi
 
processLine(){
  line="$@"
 
  char_1=${line:0:1}
  if [ $char_1 != '#' ]; then
  ###  echo $line
 
  # Variablen laden
  SwitchNAME=$(echo $line | awk -F, '{print $1}')
  SwitchIP=$(echo $line | awk -F, '{print $2}')
  SwitchSNMP=$(echo $line | awk -F, '{print $3}')
  SwitchSAV=$(echo $line | awk -F, '{print $4}')
 
  # Nur running-config
  if [ $SwitchSAV == 'r' ]; then
  echo "###########################################"
  echo "Save $SwitchNAME - IP: $SwitchIP - Running "
  echo "###########################################"
  snmpset -v 2c -c $SwitchSNMP $SwitchIP 1.3.6.1.4.1.11.2.14.11.5.1.7.1.5.6.0 i 2
  tftp $SwitchIP -v -c get running-config $K_DIR/$SwitchNAME-running-$DATE_TOKEN.cfg
  snmpset -v 2c -c $SwitchSNMP $SwitchIP 1.3.6.1.4.1.11.2.14.11.5.1.7.1.5.6.0 i 1
  echo "###########################################"
  fi
 
  # Nur startup-config
  if [ $SwitchSAV == 's' ]; then
  echo "###########################################"
  echo "Save $SwitchNAME - IP: $SwitchIP - Startup "
  echo "###########################################"
  snmpset -v 2c -c $SwitchSNMP $SwitchIP 1.3.6.1.4.1.11.2.14.11.5.1.7.1.5.6.0 i 2
  tftp $SwitchIP -v -c get startup-config $K_DIR/$SwitchNAME-startup-$DATE_TOKEN.cfg
  snmpset -v 2c -c $SwitchSNMP $SwitchIP 1.3.6.1.4.1.11.2.14.11.5.1.7.1.5.6.0 i 1
  echo "###########################################"
  fi
 
  # Beides
  if [ $SwitchSAV == 'b' ]; then
  echo "###########################################"
  echo "Save $SwitchNAME - IP: $SwitchIP - Both    "
  echo "###########################################"
  snmpset -v 2c -c $SwitchSNMP $SwitchIP 1.3.6.1.4.1.11.2.14.11.5.1.7.1.5.6.0 i 2
  tftp $SwitchIP -v -c get running-config $K_DIR/$SwitchNAME-running-$DATE_TOKEN.cfg
  tftp $SwitchIP -v -c get startup-config $K_DIR/$SwitchNAME-startup-$DATE_TOKEN.cfg
  snmpset -v 2c -c $SwitchSNMP $SwitchIP 1.3.6.1.4.1.11.2.14.11.5.1.7.1.5.6.0 i 1
  echo "###########################################"
  fi
 
  fi
 
}
 
FILE=""
 
if [ "$1" == "" ]; then
   FILE="/dev/stdin"
else
   FILE="$1"
   if [ ! -f $FILE ]; then
    echo "$FILE : does not exists"
    exit 1
   elif [ ! -r $FILE ]; then
    echo "$FILE: can not read"
    exit 2
   fi
fi
 
BAKIFS=$IFS
IFS=$(echo -en "\n\b")
exec 3<&0
exec 0<$FILE
while read line
do
    processLine $line
done
exec 0<&3
 
IFS=$BAKIFS
exit 0


Da es auf der Windows-Freigabe liegt müssen wir es nicht extra ausführbar machen.
Ansonsten ein

chmod +x /SwitchConfigs/hp_load_cfg.sh




Test!

Nun Testen wir das Backup mit

/SwitchConfigs/hp_load_cfg.sh /SwitchConfigs/HP-Switche.txt

Er legt uns einen neuen Unterordner

/SwitchConfigs/HP-Switche

an in welchen er für jeden Switch eine Konfigurationsdatei legt - mit einem Suffix aus Datum und Uhrzeit.
Rufen wir das Script noch einmal auf ommen weitere Dateien dazu.



Automatisches Backup

Wir rufen

crontab -e

auf und fügen folgende Zeile an:

0 7 * * * /SwitchConfigs/hp_load_cfg.sh /SwitchConfigs/HP-Switche.txt

Jeden Morgen um 07:00 hr macht er nun ein Backup



Anzahl der Kopien beschränken

Wenn wir an dieser Stelle aufhören würden, würde er uns bis zum jüngsten Tag Kopien der Konfigs machen.
Wir wollen aber nur die letzten 30 Tage behalten. Also bearbeiten wir noch mal die Crontab und fügen diese Zeile hinzu:

0 8 * * * /usr/bin/find /SwitchConfigs/HP-Switche -mtime +30 \( -iname ".cfg" \) -exec rm {} \;




Kommentare


Kommentar hinzufügen:
Gebe hier einen Kommentar ein. Du kannst einen beliebigen Namen oder eine Email-Adresse als Namen angeben.

Wenn du dich einloggst wird automatisch dein Benutzername genommen.
Du kannst KEINE Links hier posten - das wurde wegen anhaltender Werbung deaktiviert. Sobald ein '''http://''' im Text vorkommt wird der Kommentar verworfen Alle anderen Steuerzeichen oder Funktionen wie < br > werden ausgefiltert - zum Posten von Quelltexten ist diese Funktion hier nicht geeignet.

Falls du dringendere Fragen hast kannst du auch das Support-System von znil.net nutzen unter support.znil.net