Files
ssh-cert-login/login.sh
alf 0b05112d36 login.sh aktualisiert
* Pfad zum id_ca-Schlüssel bei scp eingeführt
* PC 77 und MATE3 hinzugefügt
2025-07-14 14:44:40 +00:00

107 lines
3.2 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
set -e
# 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=22
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"
LOG_DIR="$HOME/Gitea/ssh-cert-login/log"
LOG_SCRIPT="${LOG_DIR}/logging.sh"
LOG_FILE="${LOG_DIR}/ssh-cert-login.log"
# Logging initialisieren
source "$LOG_SCRIPT"
log_init "$LOG_FILE"
log_start "SSH-Login über CA-Zertifikat"
# 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"
["ABS"]="100.87.87.102"
["OMVPi"]="100.87.87.80"
["OMV2000"]="100.87.87.81"
["MATE3"]="100.87.87.108"
["PC77"]="100.87.87.77"
)
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"
# 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"
log_end "SSH-Login abgeschlossen"