Zentralisierte Sicherung der Konfiguration von HP ProCurve Switchen
Kategorie : News
Es ist ein bisschen umständlich, wenn man mehrere HP ProCurve Switche im Netzwerk hat und deren Konfiguration regelmäßig sichern möchte.
Deswegen habe ich mir eine zentralisierte Sicherung eingerichtet:
Dazu benötigt man einen Linux-Server (in meinem Fall CentOS 6) mit dem TFTP-Server-Dienst und der Scriptsprache expect.
Die Skriptsprache expect dient zur Automatisierung von interaktiven Aufgaben unter Unix. Es handelt sich um eine Erweiterung der Skriptsprache TCL für interaktive Anwendungen wie telnet, ftp, passwd, fsck, rlogin, ssh und andere.
Zuerst installiert man den TFTP-Server:
yum install syslinux tftp-server -y
Der TFTP-Servers wird mit Hilfe des xinetd-Daemon gestartet. Hierzu passt man die Konfigurationsdatei des Daemon (/etc/xinetd.d/tftp) wie folgt an:
# default: off # description: The tftp server serves files using the trivial file transfer \ # protocol. The tftp protocol is often used to boot diskless \ # workstations, download configuration files to network-aware printers, \ # and to start the installation process for some operating systems. service tftp { disable = no socket_type = dgram protocol = udp wait = yes user = root server = /usr/sbin/in.tftpd server_args = -c -s /var/lib/tftpboot per_source = 11 cps = 100 2 flags = IPv4 }
Der Ordner, auf den nun der TFTP-Server verwiest (Upload- und Download-Ordner ist hier in der Zeile server_args angegeben (/var/lib/tftpboot).
Anschließend passt man noch iptables an.
Ob nun xinetd und damit tftpd immer aktiv bleiben soll oder nicht, bleibt jedem selber überlassen.
Weiterführende Information zur Konfiguration siehe https://dokuwiki.nausch.org/doku.php/centos:pxe:tftp
Nun installiert man noch expect:
yum install expect -y
Weiterführende Informationen zu expect siehe http://mikiwiki.org/wiki/expect
Damit die Konfig-Dateien der Switche auch noch zentral gelagert werden, wo auch andere Konfig-Dateien sich befinden, habe ich noch einen Ordner /BackupConfigs angelegt. Im Folgenden wird via Samba eine Windows-Freigabe in diesen Ordner gemounted. In dieser Samba-Freigabe habe ich noch eine leere Datei chkfile angelegt.
Nun kommen wir zum eigentlichen Backup-Prozess. Dazu habe ich zwei Scripte backup.sh, switch-backup2.sh) und eine Datei, welche die Netzwerk-Adressen, Username und Passwort enthält, switch.list), geschrieben. Diese drei Dateien liegen alle in einem Verzeichnis.
Alle Parameter, die anzupassen sind, sind im Folgenden rot und fett markiert.
backup.sh:
Dieses Script macht folgendes:
- Es liest die Datei switch.list zeilenweise aus,
- übergibt die entsprechenden Parameter an das Script switch-backup2,
- mountet eine Samba-Freigabe in den Ordner /BackupConfigs (wurde vorher angelegt), auf der die Konfig-Dateien kopiert werden,
- schaut nach, ob die Samba-Freigabe gemountet ist, indem geprüft wird, ob die Datei chkfile existiert,
- kopiert die Konfig-Dateien vom TFTP-Ordner (hier /var/lib/tftpboot) in die Samba-Freigabe,
- löscht Konfig-Dateien, die älter sind als 60 Tage,
- unmounted die Samba-Freigabe wieder und
- versendet eine Mail.
#!/bin/bash #Read Date d=`date +%d-%m-%Y` date +"Startzeit: %d.%m.%Y %H:%M" > mail.txt echo " " >> mail.txt echo " " >> mail.txt echo "Zugriff auf folgende Switche:" >> mail.txt #Read each line in switch.list while read line do case "$line" in "#"*) ;; *) zeile=$line;; esac #Split each line into IP, Name, User, Password IFS="," set - $zeile if [ -n "$zeile" ]; then #Open switch-backup2.sh with Parameters #File to establish connection to each Switch and transfer Running Config #to tftproot folder on local host date +"$2: %d.%m.%Y %H:%M" >> mail.txt ./switch-backup2.sh $1 $2 $3 $4 $d sleep 1 fi done < ./switch.list echo " " >> mail.txt echo " " >> mail.txt echo "Folgende Dateien wurden erstellt:" >> mail.txt echo " " >> mail.txt #List files in tftproot folder on local host and write it to mail.txt file ls -ltr /var/lib/tftpboot/ >> mail.txt echo " " >> mail.txt #Mount Backup Folder on Samba-Share mount -t cifs -o username=Sambauser,password=Sambapassword "//Path-To-Samba-Share" /BackupConfigs #Check, if the mount point exists file="/BackupConfigs/chkfile" if [ -f "$file" ] then #Delete all Configs older than 60 days (2 months) echo "Folgende Dateien älter als 2 Monate wurden gelöscht:" >> mail.txt find /BackupConfigs/*.cfg -mtime +60 -print -exec rm {} \; >> mail.txt #Move Configs mv /var/lib/tftpboot/*.cfg /BackupConfigs sleep 5 umount /BackupConfigs else figlet "ERROR" >> mail.txt echo "***** MOUNT-PUNKT NICHT ERREICHBAR - DATEIEN NICHT VERSCHOBEN ****" >> mail.txt fi date +"Endzeit: %d.%m.%Y %H:%M" >> mail.txt #Send Email mail -s "Mail-Subject" "mailadress@mailserver.com" < mail.txt
switch-backup2.sh:
#!/usr/bin/expect
#Set Variables
set var_IP [lindex $argv 0]
set var_Name [lindex $argv 1]
set var_User [lindex $argv 2]
set var_Pass [lindex $argv 3]
set var_Datum [lindex $argv 4]
#Wait 5 seconds after every command
set timeout 5
#Open SSH connection for User to IP of the Switch
spawn /usr/bin/ssh $var_User@$var_IP
#Wait for message (yes/no) and sends ‚yes‘
expect "(yes/no)? " {
send "yes\r"
}
#Wait for request of ‘password’ and send the password
expect "password:"
send "$var_Pass\r"
expect "Press any key"
send " "
expect "$"
send "config\r"
send "copy running-config tftp IPAdress-of-Linux-System $var_Datum-$var_Name.cfg\r"
expect "$"
send "exit\rexit\rexit\r"
expect "(y/n)"
send "y\n"
switch.list:
#IP-Adress,Name-Of-The-Switch,User,Password IP-Adress-HP-Switch1,HP-Switch1,User,Password IP-Adress-HP-Switch2,HP-Switch2,User,Password
Die Mail, die man erhält, sieht wie folgt aus:
Startzeit: 24.03.2017 14:31 Zugriff auf folgende Switche: HP-Switch1: 24.03.2017 14:31 HP-Switch2: 24.03.2017 14:31 Folgende Dateien wurden erstellt: insgesamt 36 -rw-rw-rw- 1 nobody nobody 14854 24. Mär 14:31 24-03-2017-HP-Switch1.cfg -rw-rw-rw- 1 nobody nobody 2216 24. Mär 14:31 24-03-2017-HP-Switch2.cfg Folgende Dateien älter als 2 Monate wurden gelöscht: /BackupConfigs/16-01-2017-HP-Switch1.cfg /BackupConfigs/16-01-2017-HP-Switch2.cfg Endzeit: 24.03.2017 14:33
Für eine zeitgesteuerten Ablauf muss man jetzt nur noch die crontab anpassen:
0 23 12 * * /Path-To-Script/backup.sh >> /Path-To-Logfiles/log.txt 2>&1
Dieses Script wird nun jeden 12. im Monat um 23:00 ausgeführt und schreibt zusätzlich die Ausgabe in ein Log-Datei namens log.txt