From f359d990e4c2271926ce201eb0ff005fc6165434 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20H=C3=B6fling?= Date: Fri, 27 Jun 2025 13:04:42 +0200 Subject: [PATCH] add setup, split config --- config.cfg | 75 +++++++++++++++++ ftp_backup.sh | 138 ++++++++++++++++++++++-------- setup.sh | 229 ++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 405 insertions(+), 37 deletions(-) create mode 100644 config.cfg create mode 100644 setup.sh diff --git a/config.cfg b/config.cfg new file mode 100644 index 0000000..0edb418 --- /dev/null +++ b/config.cfg @@ -0,0 +1,75 @@ +# Dell N2048 Switch Backup Konfiguration +# Datei: /etc/switchbackup/cube-switch-01.cfg + +#=========================================== +# SWITCH-ZUGANGSDATEN (ERFORDERLICH) +#=========================================== + +# Switch IP-Adresse +SWITCH_IP="192.168.1.201" + +# SSH-Zugangsdaten +SWITCH_USER="admin" +SWITCH_PASSWORD="Ihr_Switch_Passwort_Hier" + +#=========================================== +# FTP-SERVER-KONFIGURATION (ERFORDERLICH) +#=========================================== + +# FTP-Server Details +FTP_SERVER="192.168.1.200" +FTP_USER="switch-backup" +FTP_PASSWORD="password" + +# FTP-Pfad auf dem Server (ohne führenden oder abschließenden /) +FTP_PATH="switch-backup" + +#=========================================== +# BACKUP-EINSTELLUNGEN (OPTIONAL) +#=========================================== + +# Switch-Name für Dateinamen (kurz halten wegen 32-Zeichen-Limit) +SWITCH_NAME="switch-01" + +# Was sichern: "startup-config" oder "running-config" +CONFIG_TYPE="startup-config" + +# Anzahl Backups die auf dem FTP-Server behalten werden sollen +MAX_BACKUPS=10 + +# SSH-Verbindungstest überspringen für bessere Performance +SKIP_SSH_TEST=true + +#=========================================== +# TIMEOUT-EINSTELLUNGEN (OPTIONAL) +#=========================================== + +# SSH-Verbindungs-Timeout in Sekunden +SSH_TIMEOUT=15 + +# Standard-Command-Timeout in Sekunden +COMMAND_TIMEOUT=30 + +# FTP-Copy-Timeout in Sekunden (Transfer kann länger dauern) +COPY_TIMEOUT=90 + +#=========================================== +# KOMMENTARE UND HINWEISE +#=========================================== + +# Dateiname-Format: ${SWITCH_NAME}_${CONFIG_PREFIX}_${TIMESTAMP}.cfg +# Beispiel: switch-01_sc_20250625_1430.cfg +# +# CONFIG_PREFIX wird automatisch gesetzt: +# - "sc" für startup-config +# - "rc" für running-config +# +# WICHTIG: Gesamter Dateiname darf max. 32 Zeichen haben! +# +# Backup-Ablauf: +# 1. SSH-Verbindung zum Switch +# 2. enable-Modus aktivieren +# 3. copy startup-config ftp://... +# 4. FTP-Passwort eingeben +# 5. Transfer bestätigen mit "y" +# 6. Alte Backups bereinigen (optional) diff --git a/ftp_backup.sh b/ftp_backup.sh index b68c225..8c92827 100644 --- a/ftp_backup.sh +++ b/ftp_backup.sh @@ -1,56 +1,117 @@ #!/bin/bash -# Dell N2048 Switch FTP Backup Script mit expect -# Automatisches Backup der startup-config oder running-config auf FTP-Server via SSH +# Dell N2048 Switch FTP Backup Script mit externer Konfiguration +# Aufruf: ./switch_backup.sh +# Konfiguration: /etc/switchbackup/.cfg #=========================================== -# KONFIGURATION +# GRUNDKONFIGURATION #=========================================== -# Switch-Zugangsdaten -SWITCH_IP="10.10.11.51" -SWITCH_USER="switch-backup" -SWITCH_PASSWORD="password" +# Pfad zu den Konfigurationsdateien +CONFIG_DIR="/etc/switchbackup" +SCRIPT_NAME=$(basename "$0") -# FTP-Server-Details (basierend auf Ihrem Beispiel) -FTP_SERVER="10.10.11.45" -FTP_USER="switch-backup" -FTP_PASSWORD="password" -FTP_PATH="switch-backup" +# Logging +LOG_FILE="/var/log/dell_switch_backup.log" -# BACKUP-KONFIGURATION -CONFIG_TYPE="startup-config" # "startup-config" oder "running-config" -MAX_BACKUPS=10 # Anzahl Backups die behalten werden sollen -SKIP_SSH_TEST=true # SSH-Test überspringen für bessere Performance +#=========================================== +# PARAMETER PRÜFUNG +#=========================================== -# Backup-Einstellungen (max 32 Zeichen für Dateiname) -SWITCH_NAME="cube" # Kurzer Switch-Name -CONFIG_PREFIX="sc" # "sc" für startup-config, "rc" für running-config +if [ $# -eq 0 ]; then + echo "FEHLER: Keine Konfiguration angegeben!" + echo "" + echo "Verwendung: $SCRIPT_NAME " + echo "" + echo "Beispiele:" + echo " $SCRIPT_NAME switch01" + echo " $SCRIPT_NAME datacenter-core" + echo "" + echo "Konfigurationsdateien unter: $CONFIG_DIR/" + echo "Verfügbare Konfigurationen:" + if [ -d "$CONFIG_DIR" ]; then + ls -1 "$CONFIG_DIR"/*.cfg 2>/dev/null | sed 's|.*/||; s|\.cfg$||' | sed 's/^/ - /' || echo " (keine gefunden)" + else + echo " (Verzeichnis $CONFIG_DIR existiert nicht)" + fi + exit 1 +fi + +CONFIG_NAME="$1" +CONFIG_FILE="$CONFIG_DIR/${CONFIG_NAME}.cfg" + +#=========================================== +# KONFIGURATION LADEN +#=========================================== + +# Prüfe ob Konfigurationsdatei existiert +if [ ! -f "$CONFIG_FILE" ]; then + echo "FEHLER: Konfigurationsdatei nicht gefunden: $CONFIG_FILE" + echo "" + echo "Verfügbare Konfigurationen:" + if [ -d "$CONFIG_DIR" ]; then + ls -1 "$CONFIG_DIR"/*.cfg 2>/dev/null | sed 's|.*/||; s|\.cfg$||' | sed 's/^/ - /' || echo " (keine gefunden)" + else + echo " (Verzeichnis $CONFIG_DIR existiert nicht)" + echo "" + echo "Erstellen Sie das Verzeichnis mit:" + echo " sudo mkdir -p $CONFIG_DIR" + fi + exit 1 +fi + +# Konfiguration laden +log() { + echo "$(date '+%Y-%m-%d %H:%M:%S') [$CONFIG_NAME] - $1" | tee -a "$LOG_FILE" +} + +log "Lade Konfiguration: $CONFIG_FILE" + +# Source die Konfigurationsdatei +source "$CONFIG_FILE" + +# Validiere erforderliche Parameter +required_vars="SWITCH_IP SWITCH_USER SWITCH_PASSWORD FTP_SERVER FTP_USER FTP_PASSWORD" +missing_vars="" + +for var in $required_vars; do + if [ -z "${!var}" ]; then + missing_vars="$missing_vars $var" + fi +done + +if [ -n "$missing_vars" ]; then + log "FEHLER: Fehlende Parameter in $CONFIG_FILE:$missing_vars" + exit 1 +fi + +# Setze Standardwerte falls nicht definiert +CONFIG_TYPE="${CONFIG_TYPE:-startup-config}" +MAX_BACKUPS="${MAX_BACKUPS:-10}" +SKIP_SSH_TEST="${SKIP_SSH_TEST:-true}" +SWITCH_NAME="${SWITCH_NAME:-${CONFIG_NAME}}" +FTP_PATH="${FTP_PATH:-switch-backup}" + +# Config-Prefix ableiten +CONFIG_PREFIX="sc" if [ "$CONFIG_TYPE" = "running-config" ]; then CONFIG_PREFIX="rc" fi -# Dateiname: cube_sc_20250625_0021.cfg = 24 Zeichen (max 32) +# Dateiname generieren (max 32 Zeichen) TIMESTAMP=$(date +"%Y%m%d_%H%M") BACKUP_FILENAME="${SWITCH_NAME}_${CONFIG_PREFIX}_${TIMESTAMP}.cfg" -# Logging -LOG_FILE="$BACKUP_FILENAME.log" - -# Timeout-Werte (reduziert für bessere Performance) -SSH_TIMEOUT=15 -COMMAND_TIMEOUT=30 -COPY_TIMEOUT=90 +# Timeout-Werte +SSH_TIMEOUT="${SSH_TIMEOUT:-15}" +COMMAND_TIMEOUT="${COMMAND_TIMEOUT:-30}" +COPY_TIMEOUT="${COPY_TIMEOUT:-90}" #=========================================== # FUNKTIONEN #=========================================== -# Logging-Funktion -log() { - echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a "$LOG_FILE" -} - # Prüfe ob expect installiert ist check_dependencies() { if ! command -v expect >/dev/null 2>&1; then @@ -69,13 +130,13 @@ check_dependencies() { validate_filename() { if [ ${#BACKUP_FILENAME} -gt 32 ]; then log "FEHLER: Dateiname zu lang (${#BACKUP_FILENAME} > 32 Zeichen): $BACKUP_FILENAME" - log "Kürzen Sie SWITCH_NAME oder CONFIG_PREFIX" + log "Kürzen Sie SWITCH_NAME in der Konfiguration" exit 1 fi log "Dateiname-Länge OK: $BACKUP_FILENAME (${#BACKUP_FILENAME} Zeichen)" } -# Teste SSH-Verbindung mit expect (optional für Performance) +# Teste SSH-Verbindung mit expect (optional) test_ssh_connection() { if [ "$SKIP_SSH_TEST" = "true" ]; then log "SSH-Test übersprungen (SKIP_SSH_TEST=true)" @@ -283,7 +344,7 @@ EOF local result=$? local output=$(cat "$temp_output" 2>/dev/null) - # Nur relevante Ausgabe loggen (verkürzt) + # Nur relevante Ausgabe loggen local bytes_transferred=$(echo "$output" | grep "bytes transferred" | tail -1) if [ -n "$bytes_transferred" ]; then log "Transfer: $bytes_transferred" @@ -372,8 +433,9 @@ EOF #=========================================== log "==========================================" -log "Dell N2048 FTP Backup gestartet (optimiert)" -log "Switch: $SWITCH_IP" +log "Dell N2048 FTP Backup gestartet" +log "Konfiguration: $CONFIG_NAME" +log "Switch: $SWITCH_IP ($SWITCH_NAME)" log "Config-Type: $CONFIG_TYPE" log "FTP-Server: $FTP_SERVER" log "Backup-Datei: $BACKUP_FILENAME" @@ -404,6 +466,7 @@ if execute_ftp_backup; then log "==========================================" log "BACKUP ERFOLGREICH ABGESCHLOSSEN" + log "Konfiguration: $CONFIG_NAME" log "Datei auf FTP-Server: $BACKUP_FILENAME" log "Backup-Dauer: ${backup_duration} Sekunden" log "==========================================" @@ -411,6 +474,7 @@ if execute_ftp_backup; then else log "==========================================" log "BACKUP FEHLGESCHLAGEN" + log "Konfiguration: $CONFIG_NAME" log "Prüfen Sie FTP-Server-Verbindung und Zugangsdaten" log "==========================================" exit 1 diff --git a/setup.sh b/setup.sh new file mode 100644 index 0000000..3764379 --- /dev/null +++ b/setup.sh @@ -0,0 +1,229 @@ +#!/bin/bash + +# Setup-Skript für Dell Switch Backup System +# Erstellt Verzeichnisse und Beispiel-Konfigurationen + +CONFIG_DIR="/etc/switchbackup" +LOG_DIR="/var/log" +SCRIPT_DIR="$(dirname "$(readlink -f "$0")")" + +echo "==========================================" +echo "Dell Switch Backup System Setup" +echo "==========================================" + +# Prüfe Root-Rechte für /etc Zugriff +if [ "$EUID" -ne 0 ] && [ ! -w "/etc" ]; then + echo "HINWEIS: Für /etc/switchbackup werden Root-Rechte benötigt" + echo "Verwenden Sie: sudo $0" + echo "" + echo "Erstelle lokales Verzeichnis als Alternative..." + CONFIG_DIR="./switchbackup" +fi + +# 1. Konfigurationsverzeichnis erstellen +echo "1. Erstelle Konfigurationsverzeichnis: $CONFIG_DIR" +mkdir -p "$CONFIG_DIR" +if [ $? -eq 0 ]; then + echo " ✓ Verzeichnis erstellt: $CONFIG_DIR" +else + echo " ✗ FEHLER beim Erstellen von $CONFIG_DIR" + exit 1 +fi + +# 2. Log-Verzeichnis prüfen +echo "" +echo "2. Prüfe Log-Verzeichnis: $LOG_DIR" +if [ -w "$LOG_DIR" ]; then + echo " ✓ Log-Verzeichnis verfügbar: $LOG_DIR" +else + echo " ⚠ Log-Verzeichnis nicht beschreibbar - Logs gehen nach stdout" +fi + +# 3. Abhängigkeiten prüfen +echo "" +echo "3. Prüfe Abhängigkeiten..." + +# expect prüfen +if command -v expect >/dev/null 2>&1; then + echo " ✓ expect ist installiert" +else + echo " ✗ expect fehlt - Installation:" + echo " sudo apt-get install expect" +fi + +# ftp prüfen +if command -v ftp >/dev/null 2>&1; then + echo " ✓ ftp-client ist installiert" +else + echo " ⚠ ftp-client fehlt - für Backup-Cleanup benötigt:" + echo " sudo apt-get install ftp" +fi + +# 4. Beispiel-Konfigurationen erstellen +echo "" +echo "4. Erstelle Beispiel-Konfigurationen..." + +# Beispiel 1: cube-switch-01.cfg +cat > "$CONFIG_DIR/cube-switch-01.cfg" << 'EOF' +# Dell N2048 Switch Backup Konfiguration +# Datei: switch-01.cfg + +#=========================================== +# SWITCH-ZUGANGSDATEN (ERFORDERLICH) +#=========================================== + +SWITCH_IP="192.168.1.200" +SWITCH_USER="admin" +SWITCH_PASSWORD="Ihr_Switch_Passwort_Hier" + +#=========================================== +# FTP-SERVER-KONFIGURATION (ERFORDERLICH) +#=========================================== + +FTP_SERVER="192.168.1.201" +FTP_USER="switch-backup" +FTP_PASSWORD="password" +FTP_PATH="switch-backup" + +#=========================================== +# BACKUP-EINSTELLUNGEN (OPTIONAL) +#=========================================== + +SWITCH_NAME="switch-01" +CONFIG_TYPE="startup-config" +MAX_BACKUPS=10 +SKIP_SSH_TEST=true + +#=========================================== +# TIMEOUT-EINSTELLUNGEN (OPTIONAL) +#=========================================== + +SSH_TIMEOUT=15 +COMMAND_TIMEOUT=30 +COPY_TIMEOUT=90 +EOF + +echo " ✓ Erstellt: $CONFIG_DIR/cube-switch-01.cfg" + +# Beispiel 2: datacenter-core.cfg +cat > "$CONFIG_DIR/datacenter-core.cfg" << 'EOF' +# Dell N2048 Switch Backup Konfiguration +# Datei: datacenter-core.cfg + +#=========================================== +# SWITCH-ZUGANGSDATEN (ERFORDERLICH) +#=========================================== + +SWITCH_IP="192.168.1.10" +SWITCH_USER="admin" +SWITCH_PASSWORD="Admin123!" + +#=========================================== +# FTP-SERVER-KONFIGURATION (ERFORDERLICH) +#=========================================== + +FTP_SERVER="192.168.1.100" +FTP_USER="backup" +FTP_PASSWORD="BackupPass123" +FTP_PATH="network-backups" + +#=========================================== +# BACKUP-EINSTELLUNGEN (OPTIONAL) +#=========================================== + +SWITCH_NAME="dc-core" +CONFIG_TYPE="running-config" +MAX_BACKUPS=15 +SKIP_SSH_TEST=false + +#=========================================== +# TIMEOUT-EINSTELLUNGEN (OPTIONAL) +#=========================================== + +SSH_TIMEOUT=20 +COMMAND_TIMEOUT=45 +COPY_TIMEOUT=120 +EOF + +echo " ✓ Erstellt: $CONFIG_DIR/datacenter-core.cfg" + +# Beispiel 3: Template für neue Switches +cat > "$CONFIG_DIR/template.cfg" << 'EOF' +# Dell N2048 Switch Backup Konfiguration Template +# Kopieren und anpassen für neue Switches + +#=========================================== +# SWITCH-ZUGANGSDATEN (ERFORDERLICH) +#=========================================== + +SWITCH_IP="192.168.1.XXX" +SWITCH_USER="admin" +SWITCH_PASSWORD="PASSWORT_HIER_EINTRAGEN" + +#=========================================== +# FTP-SERVER-KONFIGURATION (ERFORDERLICH) +#=========================================== + +FTP_SERVER="192.168.1.100" +FTP_USER="backup-user" +FTP_PASSWORD="FTP_PASSWORT_HIER" +FTP_PATH="switch-backup" + +#=========================================== +# BACKUP-EINSTELLUNGEN (OPTIONAL) +#=========================================== + +SWITCH_NAME="switch-XX" # WICHTIG: Max 8 Zeichen! +CONFIG_TYPE="startup-config" # oder "running-config" +MAX_BACKUPS=10 +SKIP_SSH_TEST=true + +#=========================================== +# TIMEOUT-EINSTELLUNGEN (OPTIONAL) +#=========================================== + +SSH_TIMEOUT=15 +COMMAND_TIMEOUT=30 +COPY_TIMEOUT=90 +EOF + +echo " ✓ Erstellt: $CONFIG_DIR/template.cfg" + +# 5. Berechtigung setzen +echo "" +echo "5. Setze Berechtigungen..." +chmod 600 "$CONFIG_DIR"/*.cfg +echo " ✓ Konfigurationsdateien sind nur für Owner lesbar (600)" + +# 6. Zusammenfassung +echo "" +echo "==========================================" +echo "SETUP ABGESCHLOSSEN" +echo "==========================================" +echo "" +echo "Konfigurationsverzeichnis: $CONFIG_DIR" +echo "" +echo "Erstelle Konfigurationen:" +echo " 1. cube-switch-01.cfg (Beispiel basierend auf Ihren Daten)" +echo " 2. datacenter-core.cfg (Alternatives Beispiel)" +echo " 3. template.cfg (Vorlage für neue Switches)" +echo "" +echo "Nächste Schritte:" +echo " 1. Passen Sie die Konfigurationsdateien an:" +echo " nano $CONFIG_DIR/cube-switch-01.cfg" +echo "" +echo " 2. Testen Sie das Backup:" +echo " ./switch_backup.sh cube-switch-01" +echo "" +echo " 3. Für neue Switches:" +echo " cp $CONFIG_DIR/template.cfg $CONFIG_DIR/neuer-switch.cfg" +echo " nano $CONFIG_DIR/neuer-switch.cfg" +echo " ./switch_backup.sh neuer-switch" +echo "" +echo " 4. Crontab für automatische Backups:" +echo " crontab -e" +echo " # Täglich um 2:00 Uhr" +echo " 0 2 * * * /pfad/zum/switch_backup.sh cube-switch-01" +echo "" +echo "Verfügbare Konfigurationen:" +ls -la "$CONFIG_DIR"/*.cfg | awk '{print " - " $9}' | sed "s|$CONFIG_DIR/||g; s|\.cfg||g"