Cisco Switch-Konfigurationsbackup per Bash-Skript¶
Dieses Skript sichert automatisiert die running-config eines Cisco-Switches via SSH und speichert sie über SFTP auf einem NAS-Server. Ideal zur täglichen oder wöchentlichen Sicherung mehrerer Switches.
🧰 Voraussetzungen¶
Pakete installieren (Debian/Ubuntu)¶
sudo apt update
sudo apt install sshpass openssh-client
Optional: sftp-Befehl testen¶
sftp user@nas-host
⚙️ Konfiguration¶
Definiere folgende Umgebungsvariablen im Bash-Skript oder über eine separate Datei (config.sh):
# Zugangsdaten zu Switch
SWITCH_USER="admin"
SWITCH_PASS="dein-switch-passwort"
# NAS-Ziel
NAS_USER="nasuser"
NAS_PASS="dein-nas-passwort"
NAS_HOST="192.168.1.100"
NAS_PATH="/volume1/backups/switches"
# Logging
TMP_LOG="/tmp/switch-backup.log"
Füge diese z. B. am Anfang deiner Backup-Skriptdatei ein oder source sie über:
source ./config.sh
🖥️ Verwendung des Skripts¶
Füge den folgenden Bash-Block in dein Backup-Skript ein:
backup_switch() {
local HOST="$1"
local DATE="$(date +%F_%H-%M)"
local NAME="$HOST"
local TMPFILE="/tmp/${NAME}_${DATE}.txt"
local REMOTE_DIR="${NAS_PATH}/${NAME}/_chronos"
local REMOTE_FILE="${REMOTE_DIR}/${NAME}_${DATE}.txt"
echo "[$(date +%H:%M:%S)] Starte Backup von $NAME ($HOST)..." | tee -a "$TMP_LOG"
# SSH-Abfrage der running-config
if ! sshpass -p "$SWITCH_PASS" ssh -o ConnectTimeout=10 -o StrictHostKeyChecking=no "$SWITCH_USER@$HOST" "terminal length 0; show running-config" > "$TMPFILE" 2>>"$TMP_LOG"; then
echo "[$(date +%H:%M:%S)] FEHLER: Verbindung zu $HOST fehlgeschlagen" | tee -a "$TMP_LOG"
FAIL_LIST+=("$NAME")
return 1
fi
# NAS-Verzeichnis vorbereiten
echo "[$(date +%H:%M:%S)] Erstelle NAS-Verzeichnis für $NAME..." | tee -a "$TMP_LOG"
sshpass -p "$NAS_PASS" ssh -o StrictHostKeyChecking=no "$NAS_USER@$NAS_HOST" "mkdir -p '$REMOTE_DIR'" 2>>"$TMP_LOG"
# Hochladen der Backup-Datei
echo "[$(date +%H:%M:%S)] Lade ${NAME}_${DATE}.txt hoch..." | tee -a "$TMP_LOG"
if ! sshpass -p "$NAS_PASS" sftp -o StrictHostKeyChecking=no "$NAS_USER@$NAS_HOST" <<EOF 2>>"$TMP_LOG"
put "$TMPFILE" "$REMOTE_FILE"
EOF
then
echo "[$(date +%H:%M:%S)] FEHLER: Upload fehlgeschlagen!" | tee -a "$TMP_LOG"
FAIL_LIST+=("$NAME")
rm -f "$TMPFILE"
return 1
fi
echo "[$(date +%H:%M:%S)] Backup von $NAME erfolgreich abgeschlossen." | tee -a "$TMP_LOG"
SUCCESS_LIST+=("$NAME")
rm -f "$TMPFILE"
}
🗂️ Beispiel: Backup mehrerer Switches¶
#!/bin/bash
source ./config.sh
SUCCESS_LIST=()
FAIL_LIST=()
HOSTS=("192.168.1.10" "192.168.1.11" "192.168.1.12")
for HOST in "${HOSTS[@]}"; do
backup_switch "$HOST"
done
echo
echo "Erfolgreich: ${SUCCESS_LIST[*]}"
echo "Fehlgeschlagen: ${FAIL_LIST[*]}"
🔒 Sicherheitshinweis¶
- Dieses Skript nutzt
sshpassmit Klartext-Passwörtern – für produktive Umgebungen besser mit SSH-Schlüsseln oder Vault-Lösungen arbeiten. - Logfiles enthalten Passwörter nur, wenn versehentlich etwas per
set -xoder ähnlichem geloggt wird – Logging sicher halten!
📅 Automatisieren (Cronjob)¶
Beispiel: Backup täglich um 02:00 Uhr morgens ausführen:
crontab -e
0 2 * * * /pfad/zu/switch-backup.sh >> /var/log/switch-backup.log 2>&1
Letztes Update dieser Anleitung: 24.07.2025