Unterscheidung zwischen Servern, die nur mittel PublicKey und solchen, die mit zertifizierten PublicKeys verbunden werden. Die Unterscheidung findet in Zeile 83 statt. Server, die hier eingetragen sind, werden nur mit dem PublicKey, dessen Pfad in Zeile 27 ("SIMPLE_KEY") angegeben ist, verbunden.
124 lines
3.9 KiB
Bash
Executable File
124 lines
3.9 KiB
Bash
Executable File
#!/bin/bash
|
||
set -e
|
||
GIT_PFAD="$HOME/Dokumente/Gitea"
|
||
source $GIT_PFAD/logger/logger.sh
|
||
|
||
LOGBUCH="$GIT_PFAD/logger/Logs/ssh-login.log"
|
||
log_init "$LOGBUCH"
|
||
log_start
|
||
log_info "Starte sshlogin…"
|
||
|
||
# Farben
|
||
GREEN='\033[0;32m'
|
||
YELLOW='\033[1;33m'
|
||
RED='\033[0;31m'
|
||
NC='\033[0m' # No Color
|
||
|
||
# CA-Auth Schlüssel
|
||
CA_KEY_PATH="$HOME/.ssh/id_ca"
|
||
|
||
# Config
|
||
CA_HOST="100.87.87.5"
|
||
CA_USER="alf"
|
||
CA_PORT=2222
|
||
REMOTE_SIGN_SCRIPT="/home/alf/remote_sign.sh" # Pfad auf der CA-VM, wo das Script zum Signieren zu finden ist
|
||
KEY_DIR="./temp_keys"
|
||
KEY_NAME="temp_user_key"
|
||
SIMPLE_KEY="/media/oberkoetter/schluessel1/id_oberkoetter" # Für das einfache Login ohne Zertifikat, aber mit PublicKey. Die Variable gibt die Lage des PubKeys an.
|
||
|
||
# Prüfen, ob der CA-Schlüssel vorhanden ist
|
||
if [[ ! -f "$CA_KEY_PATH" ]]; then
|
||
echo -e "${RED}[!] CA-SSH-Schlüssel ($CA_KEY_PATH) nicht gefunden. Vorgang wird abgebrochen.${NC}"
|
||
echo "Bitte stelle sicher, dass ~/.ssh/id_ca vorhanden und korrekt gesetzt ist."
|
||
log_error "Kein Publickey zur CA-VM!"
|
||
exit 1
|
||
fi
|
||
|
||
# Gum Check
|
||
if ! command -v gum &> /dev/null; then
|
||
echo -e "${RED}[!] gum ist nicht installiert. Bitte zuerst installieren.${NC}"
|
||
log_error "GUM nicht installiert!"
|
||
exit 1
|
||
fi
|
||
|
||
# Ziel-Host-Auswahl
|
||
declare -A HOSTS=(
|
||
["Server1"]="100.87.87.101"
|
||
["Server3"]="100.87.87.103"
|
||
["ABS"]="100.87.87.102"
|
||
["OMVPi"]="100.87.87.80"
|
||
["OMV2000"]="100.87.87.81"
|
||
["CA"]="100.87.87.5"
|
||
["PHOSCON"]="100.87.87.90"
|
||
["DIETPI"]="100.87.87.4"
|
||
["PROXI"]="100.87.87.100"
|
||
["MATE3"]="100.87.87.108"
|
||
["PC77"]="100.87.87.77"
|
||
["Nextcloud PTV"]="cloud.ptv-euregio.de"
|
||
["SPZSSH"]="alsdorf.spznord.de"
|
||
)
|
||
|
||
TARGET_LABEL=$(gum choose --header "Zielsystem wählen" "${!HOSTS[@]}")
|
||
TARGET_HOST="${HOSTS[$TARGET_LABEL]}"
|
||
log_info "Zielsystem gewählt: $TARGET_LABEL ($TARGET_HOST)"
|
||
|
||
TARGET_PORT=$(gum input --placeholder "Ziel SSH Port" --value "2222")
|
||
log_info "SSH-Port: $TARGET_PORT"
|
||
|
||
# Benutzer-Auswahl
|
||
USER_CHOICES=("alf" "root" "oberkoetter" "Benutzer manuell eingeben")
|
||
SSH_USER=$(gum choose --header "SSH-Benutzer wählen" "${USER_CHOICES[@]}")
|
||
if [[ "$SSH_USER" == "Benutzer manuell eingeben" ]]; then
|
||
SSH_USER=$(gum input --placeholder "SSH Benutzername")
|
||
fi
|
||
log_info "Verwendeter Benutzer: $SSH_USER"
|
||
|
||
# Gültigkeit wählen
|
||
VALIDITY_OPTIONS=("300" "600" "1800" "3600") # Sekunden
|
||
VALIDITY=$(gum choose --header "Gültigkeitsdauer des Zertifikats wählen (Sekunden)" "${VALIDITY_OPTIONS[@]}")
|
||
log_info "Zertifikatsgültigkeit: $VALIDITY Sekunden"
|
||
|
||
# Hier unterscheiden zwischen Servern, die mittels einfachem PublicKey-Verfahren und solchen, die per zertifiziertem Schlüssel angesteuert werden.
|
||
case $TARGET_LABEL in
|
||
"Nextcloud PTV" | "SPZSSH")
|
||
log_info "Einfaches Login mit statischen PublicKey..."
|
||
ssh -p "$TARGET_PORT" -i "$SIMPLE_KEY" "$SSH_USER@$TARGET_HOST"
|
||
log_info " ERR: $?"
|
||
;;
|
||
|
||
*)
|
||
# Schlüssel vorbereiten
|
||
mkdir -p "$KEY_DIR"
|
||
cd "$KEY_DIR"
|
||
|
||
log_info "Prüfe auf vorhandene temporäre Schlüssel"
|
||
rm -f "$KEY_NAME" "$KEY_NAME.pub" "$KEY_NAME-cert.pub"
|
||
|
||
log_info "Generiere temporären SSH-Key"
|
||
ssh-keygen -f "$KEY_NAME" -N "" -C "$SSH_USER@temp" > /dev/null
|
||
|
||
log_info "Sende Public Key zur CA (${CA_HOST})"
|
||
scp -P "$CA_PORT" -i "$CA_KEY_PATH" "${KEY_NAME}.pub" "${CA_USER}@${CA_HOST}:/tmp/" || {
|
||
log_error "Fehler beim Senden des Public Keys zur CA"
|
||
exit 1
|
||
}
|
||
|
||
log_info "Fordere Signatur von CA an..."
|
||
ssh -i "$CA_KEY_PATH" -p "$CA_PORT" "${CA_USER}@${CA_HOST}" "$REMOTE_SIGN_SCRIPT /tmp/${KEY_NAME}.pub $SSH_USER $VALIDITY" || {
|
||
log_error "Fehler bei der Signierung durch die CA"
|
||
exit 1
|
||
}
|
||
|
||
log_info "Lade signiertes Zertifikat von CA"
|
||
scp -P "$CA_PORT" -i "$CA_KEY_PATH" "${CA_USER}@${CA_HOST}:/tmp/${KEY_NAME}-cert.pub" . || {
|
||
log_error "Fehler beim Abrufen des Zertifikats von der CA"
|
||
exit 1
|
||
}
|
||
|
||
log_info "Zertifikat erfolgreich erhalten – starte SSH-Verbindung"
|
||
ssh -p "$TARGET_PORT" -i "$KEY_NAME" "$SSH_USER@$TARGET_HOST"
|
||
;;
|
||
esac
|
||
|
||
log_end "SSH-Login abgeschlossen"
|