#!/bin/bash set -e GIT_PFAD="$HOME/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" ["Nextcloud Alf"]="wralto.org" ["SPZSSH"]="alsdorf.spznord.de" ) TARGET_LABEL=$(gum choose --header "Zielsystem wählen" "${!HOSTS[@]}") # Hier unterscheiden zwischen Servern, die mittels einfachem PublicKey-Verfahren und solchen, die per zertifiziertem Schlüssel angesteuert werden. case $TARGET_LABEL in "Nextcloud Alf") log_info "Einfaches Login Nextcloud3" ssh ssh-test90969@wralto.org log_info "Nextcloud3 fertig. ERR: $?" ;; "Nextcloud PTV" | "SPZSSH") log_info "Einfaches Login mit statischen PublicKey..." ssh -p "$TARGET_PORT" -i "$SIMPLE_KEY" "$SSH_USER@$TARGET_HOST" log_info " ERR: $?" ;; *) 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" # 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"