From 4a9bf3247a6db9104bc5327dde27dab1541f540d Mon Sep 17 00:00:00 2001 From: Stefan Mewes Date: Sun, 15 Jun 2025 23:30:47 +0200 Subject: [PATCH] Skript sauber strukturiert und mit Logging --- ssh_manager.sh | 126 ++++++++++++++++++++++++++++--------------------- 1 file changed, 72 insertions(+), 54 deletions(-) diff --git a/ssh_manager.sh b/ssh_manager.sh index f352db1..fff74e2 100755 --- a/ssh_manager.sh +++ b/ssh_manager.sh @@ -4,62 +4,80 @@ FILE_URL="http://fileserver.fritz.box/Mobaxterm/Homelab.mxtsessions" INPUT_FILE="Homelab.mxtsessions" OUTPUT_FILE="serverliste.csv" +LOG_FILE="script.log" -# Datei herunterladen (nur wenn erfolgreich, dann weitermachen) -if wget -q "$FILE_URL" -O "$INPUT_FILE"; then - echo "Datei erfolgreich heruntergeladen." -else - echo "Fehler: Datei konnte nicht heruntergeladen werden. Skript wird beendet." - exit 1 -fi +log() { + echo "[$(date +"%Y-%m-%d %H:%M:%S")] $1" | tee -a "$LOG_FILE" +} -# CSV-Datei vorbereiten -echo "Name,Adresse / Host" > "$OUTPUT_FILE" +download_file() { + # Vor dem Download ggf. existierende Dateien mit Zähler löschen + rm -f Homelab.mxtsessions* 2>/dev/null -# Daten aus der MobaXterm-Datei extrahieren und in CSV schreiben -awk ' - /^\[Bookmarks/ { in_section=1; next } - /^\[/ && !/^\[Bookmarks/ { in_section=0 } - in_section && /=#109#0%/ { - split($0, parts, "=") - name = parts[1] - split(parts[2], details, "%") - host = details[2] # Hier ist die IP oder URL - gsub(/.*\\n/, "", name) - print name "," host - } -' "$INPUT_FILE" >> "$OUTPUT_FILE" - -echo "Export abgeschlossen: $OUTPUT_FILE" - -# Arrays für Menü vorbereiten -declare -a server_names -declare -a ip_addresses - -# CSV ohne Kopfzeile einlesen -while IFS="," read -r name ip; do - server_names+=("$name") - ip_addresses+=("$ip") -done < <(tail -n +2 "$OUTPUT_FILE") - -# Menü anzeigen -while true; do - menu_entries=() - for i in "${!server_names[@]}"; do - menu_entries+=("$i" "${server_names[i]} (${ip_addresses[i]})") - done - menu_entries+=("q" "Ende") - - gui_choice=$(whiptail --title "Serverauswahl" \ - --menu "Wähle einen Server aus:" 20 78 10 \ - "${menu_entries[@]}" 3>&1 1>&2 2>&3) - - if [[ $? -ne 0 || "$gui_choice" == "q" ]]; then - echo "Programm beendet." - exit 0 + if wget -q "$FILE_URL" -O "$INPUT_FILE"; then + log "Datei erfolgreich heruntergeladen." + else + log "Fehler: Datei konnte nicht heruntergeladen werden. Skript wird beendet." + exit 1 fi +} - index=$gui_choice - echo "Verbinde zu ${server_names[index]} (${ip_addresses[index]})..." - ssh ${ip_addresses[index]} -done +extract_data() { + echo "Name,Adresse / Host" > "$OUTPUT_FILE" + awk ' + /^\[Bookmarks/ { in_section=1; next } + /^\[/ && !/^\[Bookmarks/ { in_section=0 } + in_section && /=#109#0%/ { + split($0, parts, "=") + name = parts[1] + split(parts[2], details, "%") + host = details[2] + gsub(/.*\\n/, "", name) + print name "," host + } + ' "$INPUT_FILE" >> "$OUTPUT_FILE" + log "Daten extrahiert und in $OUTPUT_FILE gespeichert." +} + +read_server_list() { + server_names=() + ip_addresses=() + while IFS="," read -r name ip; do + server_names+=("$name") + ip_addresses+=("$ip") + done < <(tail -n +2 "$OUTPUT_FILE") + log "Serverliste erfolgreich eingelesen." +} + +show_menu() { + while true; do + menu_entries=() + for i in "${!server_names[@]}"; do + menu_entries+=("$i" "${server_names[i]} (${ip_addresses[i]})") + done + menu_entries+=("q" "Ende") + + gui_choice=$(whiptail --title "Serverauswahl" \ + --menu "Wähle einen Server aus:" 20 78 10 \ + "${menu_entries[@]}" 3>&1 1>&2 2>&3) + + if [[ $? -ne 0 || "$gui_choice" == "q" ]]; then + log "Benutzer hat das Programm beendet." + exit 0 + fi + + index=$gui_choice + log "Verbinde zu ${server_names[index]} (${ip_addresses[index]})..." + ssh ${ip_addresses[index]} + done +} + +main() { + log "Skript gestartet." + download_file + extract_data + read_server_list + show_menu +} + +main