Zentralisierte Sicherung der Konfiguration von HP ProCurve Switchen

  • -

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

Share

Share