Files
sshs/sshs.bash
Patrick Niebeling 160e478351 Initial Commit
2025-07-18 09:13:34 +02:00

63 lines
1.5 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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"