login.sh aktualisiert

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.
This commit is contained in:
alf
2025-11-17 15:15:32 +00:00
parent ad8862a479
commit f5bc23801b

View File

@ -1,9 +1,9 @@
#!/bin/bash
set -e
GIT_PFAD="$HOME/Gitea"
GIT_PFAD="$HOME/Dokumente/Gitea"
source $GIT_PFAD/logger/logger.sh
LOGBUCH="$GIT_PFAD/logger/Logs/sshlogin.log"
LOGBUCH="$GIT_PFAD/logger/Logs/ssh-login.log"
log_init "$LOGBUCH"
log_start
log_info "Starte sshlogin…"
@ -24,7 +24,7 @@ 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
@ -54,6 +54,8 @@ declare -A HOSTS=(
["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[@]}")
@ -76,35 +78,46 @@ 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"
# 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: $?"
;;
log_info "Prüfe auf vorhandene temporäre Schlüssel"
rm -f "$KEY_NAME" "$KEY_NAME.pub" "$KEY_NAME-cert.pub"
*)
# Schlüssel vorbereiten
mkdir -p "$KEY_DIR"
cd "$KEY_DIR"
log_info "Generiere temporären SSH-Key"
ssh-keygen -f "$KEY_NAME" -N "" -C "$SSH_USER@temp" > /dev/null
log_info "Prüfe auf vorhandene temporäre Schlüssel"
rm -f "$KEY_NAME" "$KEY_NAME.pub" "$KEY_NAME-cert.pub"
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_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_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_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_info "Zertifikat erfolgreich erhalten starte SSH-Verbindung"
ssh -p "$TARGET_PORT" -i "$KEY_NAME" "$SSH_USER@$TARGET_HOST"
;;
esac
log_end "SSH-Login abgeschlossen"