Massenbackup für Switche via Telnet & TFTP

Das Beispiel habe ich für Huaweiswitche erstellt. Es geht scheinbar auch über SNMP aber per Telnet die Befehle absetzen geht bei jedem Hersteller.

Folgende Software wird benötigt:

  • TFTP Server (z.B. 3CDaemon -> http://support.3com.com/software/utilities_for_windows_32_bit.htm)
  • Tera Term (hier ttpmacro -> http://www.heise.de/software/download/teraterm_pro/51776)

Das einzige was man wissen muss sind die Befehle wie man die Konfiguration bei dem entsprechenden Switch sichert. Bei Huawei liegt per Default die Konfiguration in vrpcfg.cfg. Mit dem Kommando tftp x.x.x.x put flash:/vrpcfg.cfg xxxx.cfg kann man die Konfig auf einen TFTP-Server schicken. Das Macro muss also auf verschiedene Situationen warten und dann Kommandos schicken. Das Macro speichert die Konfigurationen unter der jeweiligen IP-Adresse. Eine Erweiterung das noch ein Datum mit in dem Dateinamen eingebaut wird ist auch möglich.

Bei Huawei sieht das wie folgt aus:

>> Username:
<< Username senden
>> Password:
<< Password senden
>> <Switch-1>
<< Komando tftp ... senden
>> <Switch-1>
<< quit senden

Batch-Datei (get_cfgs.bat):

cls
for /F "eol=; tokens=1,2,3,4 delims=, " %%i in (devices.txt) do ( 

teraterm\ttpmacro.exe get_cfgs.ttl %%i

)

Geräte (devices.txt):

172.20.6.11
172.20.6.12
172.20.6.13
...

ttl Macro Script für Tera Term Macro Programm (get_cfg.ttl):

; Host & Port
host = param2

; Username
username = 'admin'

; Password
password = 'admin'

strconcat host ':23 /nossh'
connect host

wait 'Username:'
sendln username
wait 'Password:'
sendln password
wait '>'
kommando = 'tftp 172.20.16.113 put flash:/vrpcfg.cfg '
strconcat kommando param2
strconcat kommando '.cfg'

sendln kommando

wait '>'

sendln 'quit'

Die Macrosprache von Tera Term ist sehr einfach und lässt sich auf andere Hersteller leicht umbiegen.

Viel Spaß 😉

HP Procurve Bash Backup

Howto für Ubuntu und Debian

Mit diesem Script können Massenbackups durchgeführt werden. Das Tool ist mandantenfähig, es legt pro Kunde einen Unterordner an.

Benötigte Pakete
sudo apt-get install snmp tftp-hpa
Mandantenfile
# Hostname,IP,SNMP-RW-Community, (r=running-config,s=startup-config,b=both)
Switch1,10.1.1.1,geheim,r
Switch2,10.1.1.2,geheim,r
Script

hp_load_cfg.sh

#!/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
Script anwenden
./hp_load_cfg.sh Kunde1.txt
Test
./hp_load_cfg.sh Kunde1.txt

###########################################
Save Switch1 - IP: 10.21.73.241 - Running
###########################################
SNMPv2-SMI::enterprises.11.2.14.11.5.1.7.1.5.6.0 = INTEGER: 2
Connected to 10.21.73.241 (10.21.73.241), port 69
getting from 10.21.73.241:running-config to Kunde1/Switch1-running-2009-07-22-234538.cfg [netascii]
Received 748 bytes in 2.3 seconds [2610 bit/s]
SNMPv2-SMI::enterprises.11.2.14.11.5.1.7.1.5.6.0 = INTEGER: 1
###########################################
###########################################
Save Switch2 - IP: 10.21.73.242 - Running
###########################################
SNMPv2-SMI::enterprises.11.2.14.11.5.1.7.1.5.6.0 = INTEGER: 2
Connected to 10.21.73.242 (10.21.73.242), port 69
getting from 10.21.73.242:running-config to Kunde1/Switch2-running-2009-07-22-234538.cfg [netascii]
Received 737 bytes in 1.5 seconds [3981 bit/s]
SNMPv2-SMI::enterprises.11.2.14.11.5.1.7.1.5.6.0 = INTEGER: 1
###########################################

Das Kundenverzeichnis

ls -la Kunde1
...
-rw-r--r-- 1 sysadmin sysadmin  721 2009-07-22 23:45 Switch1-running-2009-07-22-234538.cfg
-rw-r--r-- 1 sysadmin sysadmin  710 2009-07-22 23:45 Switch2-running-2009-07-22-234538.cfg
...