Skript sauber strukturiert und mit Logging
This commit is contained in:
126
ssh_manager.sh
126
ssh_manager.sh
@@ -4,62 +4,80 @@
|
|||||||
FILE_URL="http://fileserver.fritz.box/Mobaxterm/Homelab.mxtsessions"
|
FILE_URL="http://fileserver.fritz.box/Mobaxterm/Homelab.mxtsessions"
|
||||||
INPUT_FILE="Homelab.mxtsessions"
|
INPUT_FILE="Homelab.mxtsessions"
|
||||||
OUTPUT_FILE="serverliste.csv"
|
OUTPUT_FILE="serverliste.csv"
|
||||||
|
LOG_FILE="script.log"
|
||||||
|
|
||||||
# Datei herunterladen (nur wenn erfolgreich, dann weitermachen)
|
log() {
|
||||||
if wget -q "$FILE_URL" -O "$INPUT_FILE"; then
|
echo "[$(date +"%Y-%m-%d %H:%M:%S")] $1" | tee -a "$LOG_FILE"
|
||||||
echo "Datei erfolgreich heruntergeladen."
|
}
|
||||||
else
|
|
||||||
echo "Fehler: Datei konnte nicht heruntergeladen werden. Skript wird beendet."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# CSV-Datei vorbereiten
|
download_file() {
|
||||||
echo "Name,Adresse / Host" > "$OUTPUT_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
|
if wget -q "$FILE_URL" -O "$INPUT_FILE"; then
|
||||||
awk '
|
log "Datei erfolgreich heruntergeladen."
|
||||||
/^\[Bookmarks/ { in_section=1; next }
|
else
|
||||||
/^\[/ && !/^\[Bookmarks/ { in_section=0 }
|
log "Fehler: Datei konnte nicht heruntergeladen werden. Skript wird beendet."
|
||||||
in_section && /=#109#0%/ {
|
exit 1
|
||||||
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
|
|
||||||
fi
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
index=$gui_choice
|
extract_data() {
|
||||||
echo "Verbinde zu ${server_names[index]} (${ip_addresses[index]})..."
|
echo "Name,Adresse / Host" > "$OUTPUT_FILE"
|
||||||
ssh ${ip_addresses[index]}
|
awk '
|
||||||
done
|
/^\[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
|
||||||
|
|||||||
Reference in New Issue
Block a user