Files
skripte/ssh_manager.sh

109 lines
3.0 KiB
Bash
Executable File

#!/bin/bash
# Konfigurationsvariablen
FILE_URL="http://fileserver.fritz.box/Mobaxterm/Homelab.mxtsessions"
INPUT_FILE="Homelab.mxtsessions"
OUTPUT_FILE="serverliste.csv"
LOG_FILE="script.log"
LOG_RETENTION_DAYS=2 # Log-Einträge älter als X Tage werden entfernt
log() {
echo "[$(date +"%Y-%m-%d %H:%M:%S")] $1" | tee -a "$LOG_FILE"
}
clean_old_logs() {
tmp_log="${LOG_FILE}.tmp"
cutoff_date=$(date -d "-${LOG_RETENTION_DAYS} days" +'%Y-%m-%d %H:%M:%S')
awk -v cutoff="$cutoff_date" '
/^\[[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}\]/ {
timestamp = substr($0, 2, 19)
if (timestamp >= cutoff) print $0
next
}
# Alle anderen Zeilen behalten (auch ohne Zeitstempel)
{ print $0 }
' "$LOG_FILE" > "$tmp_log" && mv "$tmp_log" "$LOG_FILE"
}
download_file() {
rm -f "$INPUT_FILE" 2>/dev/null
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
}
extract_data() {
echo "Name,Host,Port,Benutzer" > "$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]
port = details[3]
user = details[4]
if (host != "") {
if (port == "") port = "22"
if (user == "") user = "root"
print name "," host "," port "," user
}
}
' "$INPUT_FILE" >> "$OUTPUT_FILE"
log "Daten extrahiert und in $OUTPUT_FILE gespeichert."
}
read_server_list() {
server_names=()
ip_addresses=()
port_numbers=()
usernames=()
while IFS="," read -r name ip port user; do
server_names+=("$name")
ip_addresses+=("$ip")
port_numbers+=("$port")
usernames+=("$user")
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]}:${port_numbers[i]})")
done
menu_entries+=("q" "Ende")
gui_choice=$(whiptail --title "Serverauswahl" \
--menu "Wähle einen Server aus:" 20 90 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]} (${usernames[index]}@${ip_addresses[index]}:${port_numbers[index]})..."
ssh -p "${port_numbers[index]}" "${usernames[index]}@${ip_addresses[index]}"
done
}
main() {
[[ -f "$LOG_FILE" ]] && clean_old_logs
log "Skript gestartet."
download_file
extract_data
read_server_list
show_menu
}
main