#!/bin/bash KNOWN_HOSTS="$HOME/.ssh/known_hosts" # Hosts extrahieren – ignoriert gehashte Zeilen HOSTS=$(awk ' { split($1, hosts, ","); for (i in hosts) if (substr(hosts[i], 1, 1) != "|") print hosts[i]; } ' "$KNOWN_HOSTS" | sort -u) # Eingabe mit fzf (Suchfenster) INPUT=$( (echo "$HOSTS") | fzf --prompt="SSH zu Host (neu eingeben möglich): " --height=100% --layout=reverse --border --print-query) # fzf gibt als erstes die Suchanfrage aus, dann die Auswahl # split in erste Zeile (Query) und zweite Zeile (Auswahl) readarray -t LINES <<< "$INPUT" QUERY="${LINES[0]}" SELECTED="${LINES[1]}" # Wenn nichts eingegeben und nichts ausgewählt → Abbruch if [[ -z "$QUERY" && -z "$SELECTED" ]]; then exit 0 fi # Wenn etwas ausgewählt wurde, nutze das, sonst das Query (freie Eingabe) if [[ -n "$SELECTED" ]]; then TARGET_RAW="$SELECTED" else TARGET_RAW="$QUERY" fi # Port & Host extrahieren aus Known Hosts Format [host]:port oder normal if [[ "$TARGET_RAW" =~ ^\[([^\]]+)\]:(.+)$ ]]; then HOST="${BASH_REMATCH[1]}" PORT="${BASH_REMATCH[2]}" else HOST="$TARGET_RAW" PORT="" fi # Port-Abfrage nur wenn kein Port aus known_hosts gesetzt if [[ -z "$PORT" ]]; then read -rp "🔢 Port (leer für 22): " PORT PORT=${PORT:-22} fi # User-Abfrage read -rp "👤 Benutzername (leer für aktuellen User: $USER): " SSH_USER if [[ -n "$SSH_USER" ]]; then TARGET="${SSH_USER}@${HOST}" else TARGET="$HOST" fi echo -e "\n🔌 Verbinde mit: $TARGET (Port $PORT)" sleep 0.5 exec ssh -p "$PORT" "$TARGET"