add setup, split config

This commit is contained in:
Dominik Höfling 2025-06-27 13:04:42 +02:00
parent a8f3751f48
commit f359d990e4
3 changed files with 405 additions and 37 deletions

75
config.cfg Normal file
View File

@ -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)

View File

@ -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 <konfig_name>
# Konfiguration: /etc/switchbackup/<konfig_name>.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 <konfig_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

229
setup.sh Normal file
View File

@ -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"