Anpassungen im Log und testen, ob PublicKey zur CA vorhanden ist.

This commit is contained in:
2025-07-03 22:42:27 +02:00
parent 3f0a97eb92
commit d2d50149ba
4 changed files with 61 additions and 102 deletions

120
login.sh
View File

@ -7,100 +7,98 @@ YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m' # No Color
# Pfad zum Script-Verzeichnis
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# CA-Auth Schlüssel
CA_KEY_PATH="$HOME/.ssh/id_ca"
# Logging-Script einbinden
source "$SCRIPT_DIR/log/logging.sh"
# Logdatei im log/-Verzeichnis
LOG_FILE="$SCRIPT_DIR/log/ssh-cert-login.log"
log_init "$LOG_FILE"
log_start "SSH Zertifikat Login"
# Config CA und Ziel (Standardwerte)
# Config
CA_HOST="100.87.87.5"
CA_USER="alf"
CA_PORT=22
REMOTE_SIGN_SCRIPT="/home/alf/remote_sign.sh"
KEY_DIR="$SCRIPT_DIR/temp_keys"
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"
CA_SSH_KEY="$HOME/.ssh/id_ca"
LOG_DIR="$HOME/Gitea/ssh-cert-login/log"
LOG_SCRIPT="${LOG_DIR}/logging.sh"
LOG_FILE="${LOG_DIR}/ssh-cert-login.log"
# Gum Check
if ! command -v gum &> /dev/null; then
log_error "gum ist nicht installiert. Bitte zuerst installieren."
# 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
# VM Alias → IP Map
declare -A VM_MAP=(
[Server1]="100.87.87.101"
[ABS]="100.87.87.102"
[OMVPi]="100.87.87.80"
[OMV2000]="100.87.87.81"
)
# Auswahl der VM per Alias mit gum choose
VM_ALIAS=$(gum choose --header "Wähle die Ziel-VM" "${!VM_MAP[@]}")
TARGET_HOST="${VM_MAP[$VM_ALIAS]}"
# Benutzer-Auswahl mit festen Optionen + freie Eingabe
USER_OPTIONS=("alf" "root" "oberkoetter" "Anderer Benutzer")
SELECTED_USER=$(gum choose --header "Wähle den SSH-Benutzer" "${USER_OPTIONS[@]}")
if [ "$SELECTED_USER" == "Anderer Benutzer" ]; then
SSH_USER=$(gum input --placeholder "Benutzername eingeben")
else
SSH_USER="$SELECTED_USER"
# 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"
)
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"
VALIDITY_OPTIONS=("300" "600" "1800" "3600") # Sek. 5min, 10min, 30min, 1h
VALIDITY=$(gum choose --header "Gültigkeitsdauer des Zertifikats wählen" "${VALIDITY_OPTIONS[@]}")
# 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"
# Logge die Ziel-VM und den SSH-Benutzer
log_info "Ziel-VM: $VM_ALIAS ($TARGET_HOST)"
log_info "SSH-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"
# Keys vorbereiten
# Schlüssel vorbereiten
mkdir -p "$KEY_DIR"
cd "$KEY_DIR"
log_info "Prüfe auf vorhandene temporäre Schlüssel..."
if [[ -f "$KEY_NAME" || -f "${KEY_NAME}.pub" || -f "${KEY_NAME}-cert.pub" ]]; then
log_warn "Vorherige temporäre Schlüssel werden gelöscht..."
rm -f "$KEY_NAME" "$KEY_NAME.pub" "$KEY_NAME-cert.pub"
fi
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..."
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 -i "$CA_SSH_KEY" -P "$CA_PORT" "${KEY_NAME}.pub" "${CA_USER}@${CA_HOST}:/tmp/" || {
log_info "Sende Public Key zur CA (${CA_HOST})"
scp -P "$CA_PORT" "${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_SSH_KEY" -p "$CA_PORT" "${CA_USER}@${CA_HOST}" \
"$REMOTE_SIGN_SCRIPT /tmp/${KEY_NAME}.pub $SSH_USER $VALIDITY" || {
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 -i "$CA_SSH_KEY" -P "$CA_PORT" "${CA_USER}@${CA_HOST}:/tmp/${KEY_NAME}-cert.pub" . || {
log_info "Lade signiertes Zertifikat von CA"
scp -P "$CA_PORT" "${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"
log_info "Starte SSH-Verbindung zum Zielsystem (${VM_ALIAS} / ${TARGET_HOST}) über Port ${TARGET_PORT}..."
log_info "Zertifikat erfolgreich erhalten starte SSH-Verbindung"
ssh -p "$TARGET_PORT" -i "$KEY_NAME" "$SSH_USER@$TARGET_HOST"
log_end "SSH Zertifikat Login"
log_end "SSH-Login abgeschlossen"