Files
sshs/sshs.bash
Patrick Niebeling ba0bc6d7dc Update Code
2025-07-18 09:22:50 +02:00

104 lines
2.2 KiB
Bash
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. 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"
# --- Funktion: SSH-Verbindung aufbauen ---
connect_ssh() {
local host="$1"
local port="$2"
local user="$3"
if [[ -n "$user" ]]; then
TARGET="${user}@${host}"
else
TARGET="$host"
fi
echo -e "\n🔌 Verbinde mit: $TARGET (Port $port)"
sleep 0.5
exec ssh -p "$port" "$TARGET"
}
# --- Wenn Parameter übergeben wurde, direkt nutzen ---
if [[ -n "$1" ]]; then
INPUT="$1"
# user@host:port
if [[ "$INPUT" =~ ^([^@]+)@([^:]+):([0-9]+)$ ]]; then
SSH_USER="${BASH_REMATCH[1]}"
HOST="${BASH_REMATCH[2]}"
PORT="${BASH_REMATCH[3]}"
# user@host
elif [[ "$INPUT" =~ ^([^@]+)@(.+)$ ]]; then
SSH_USER="${BASH_REMATCH[1]}"
HOST="${BASH_REMATCH[2]}"
PORT="22"
# host:port
elif [[ "$INPUT" =~ ^([^:]+):([0-9]+)$ ]]; then
SSH_USER=""
HOST="${BASH_REMATCH[1]}"
PORT="${BASH_REMATCH[2]}"
# host
else
SSH_USER=""
HOST="$INPUT"
PORT="22"
fi
connect_ssh "$HOST" "$PORT" "$SSH_USER"
exit 0
fi
# --- Hosts aus known_hosts im Format host:port extrahieren ---
HOSTS=$(awk '
{
split($1, hosts, ",");
for (i in hosts) {
if (substr(hosts[i], 1, 1) != "|") {
if (match(hosts[i], /^\[.*\]:[0-9]+$/)) {
hostport = hosts[i]
gsub(/^\[/, "", hostport)
gsub(/\]/, "", hostport)
print hostport
} else {
print hosts[i] ":22"
}
}
}
}
' "$KNOWN_HOSTS" | sort -u)
# --- Auswahl via fzf ---
INPUT=$( (echo "$HOSTS") | fzf --prompt="SSH zu Host (z.B. host:port oder frei eingeben): " --height=100% --layout=reverse --border --print-query)
readarray -t LINES <<< "$INPUT"
QUERY="${LINES[0]}"
SELECTED="${LINES[1]}"
if [[ -z "$QUERY" && -z "$SELECTED" ]]; then
exit 0
fi
if [[ -n "$SELECTED" ]]; then
TARGET_RAW="$SELECTED"
else
TARGET_RAW="$QUERY"
fi
# host:port erkennen
if [[ "$TARGET_RAW" =~ ^([^:]+):([0-9]+)$ ]]; then
HOST="${BASH_REMATCH[1]}"
PORT="${BASH_REMATCH[2]}"
else
HOST="$TARGET_RAW"
PORT="22"
fi
# Benutzername abfragen
read -rp "👤 Benutzername (leer für aktuellen User: $USER): " SSH_USER
[ -z "$SSH_USER" ] && SSH_USER=""
connect_ssh "$HOST" "$PORT" "$SSH_USER"