Skip to content

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 sshpass mit 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 -x oder ä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