Compare commits

...

3 Commits

Author SHA1 Message Date
6c2ae7637b Merge branch 'main' of http://100.87.87.6:3000/alf/ssh-cert-login
Nach Änderungen lokal und im Repo
2025-07-03 22:44:11 +02:00
d2d50149ba Anpassungen im Log und testen, ob PublicKey zur CA vorhanden ist. 2025-07-03 22:42:27 +02:00
3f0a97eb92 Vergiß ssh-cert-login.log 2025-07-03 21:05:59 +02:00
5 changed files with 62 additions and 103 deletions

2
.gitignore vendored
View File

@ -1,5 +1,5 @@
# Log-Verzeichnis und Dateien (Logdateien nie committen) # Log-Verzeichnis und Dateien (Logdateien nie committen)
log/ log/ssh-cert-login.log
# Temporäre SSH Keys # Temporäre SSH Keys
temp_keys/ temp_keys/

38
id_ca
View File

@ -1,38 +0,0 @@
-----BEGIN OPENSSH PRIVATE KEY-----
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
-----END OPENSSH PRIVATE KEY-----

View File

@ -1 +0,0 @@
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC2VrWLyOnW5eHKAASFtxvHEnvL1unTHHsvb4ndNAxmhU+4gOMddRvghFymcQS4VmqIErCOKHg36AjzPp3oBw9AL1HPw7nf+SUbZQi9iKhbs1+lC0fNqRQm9CY4t+tjAC8AwxN4os1yvVwmyXqaFTaArRAk1BCOP2gQBr7OmO0ECVTtXXKjyAxnvp/4GouU9KTjs+tDAYbcQz5H6yXlwhDjqO65X1HBC61wDo8FTqeIWI215j0pfgE5YNURJgOkmjcs34IxrgyRt32fKaXZNXRbDOc1OAwAm3Sk7yGiuwTohp5HsnYp8yQjTz50OlyZuyT1g3y5Dkz5ISKsZeQ2Uag9DLjhXxAUF8G2oFOs0z9IU9LKrv89A9xDUFsoMtI6dnUAOHWBhyUDxSgYWT87bmsUoHZ17zyp2I6QzG6olGH5bUoq/ApuxfnTvIie/ZeVoC0jPvys4MOPMANNJNNrSkO++2vy6eOhcEvSWaFkg8oHabOr4cCblueIFhV+sp6ObDM= oberkoetter@PC7-77

View File

@ -1,7 +1,7 @@
#!/bin/bash #!/bin/bash
DEFAULT_LOG_FILE="./log/log.txt" DEFAULT_LOG_FILE="./log-default.txt"
ACTIVE_LOG_FILE="/home/oberkoetter/Dokumente/Git/log.txt" ACTIVE_LOG_FILE="./log.txt"
log_init() { log_init() {
ACTIVE_LOG_FILE="${1:-$DEFAULT_LOG_FILE}" ACTIVE_LOG_FILE="${1:-$DEFAULT_LOG_FILE}"

120
login.sh
View File

@ -7,100 +7,98 @@ YELLOW='\033[1;33m'
RED='\033[0;31m' RED='\033[0;31m'
NC='\033[0m' # No Color NC='\033[0m' # No Color
# Pfad zum Script-Verzeichnis # CA-Auth Schlüssel
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" CA_KEY_PATH="$HOME/.ssh/id_ca"
# Logging-Script einbinden # Config
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)
CA_HOST="100.87.87.5" CA_HOST="100.87.87.5"
CA_USER="alf" CA_USER="alf"
CA_PORT=22 CA_PORT=22
REMOTE_SIGN_SCRIPT="/home/alf/remote_sign.sh" REMOTE_SIGN_SCRIPT="/home/alf/remote_sign.sh" # Pfad auf der CA-VM, wo das Script zum Signieren zu finden ist
KEY_DIR="$SCRIPT_DIR/temp_keys" KEY_DIR="./temp_keys"
KEY_NAME="temp_user_key" 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 # Logging initialisieren
log_error "gum ist nicht installiert. Bitte zuerst installieren." 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 exit 1
fi fi
# VM Alias → IP Map # Gum Check
declare -A VM_MAP=( if ! command -v gum &> /dev/null; then
[Server1]="100.87.87.101" echo -e "${RED}[!] gum ist nicht installiert. Bitte zuerst installieren.${NC}"
[ABS]="100.87.87.102" log_error "GUM nicht installiert!"
[OMVPi]="100.87.87.80" exit 1
[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"
fi 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") 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 # Benutzer-Auswahl
VALIDITY=$(gum choose --header "Gültigkeitsdauer des Zertifikats wählen" "${VALIDITY_OPTIONS[@]}") 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 # Gültigkeit wählen
log_info "Ziel-VM: $VM_ALIAS ($TARGET_HOST)" VALIDITY_OPTIONS=("300" "600" "1800" "3600") # Sekunden
log_info "SSH-Benutzer: $SSH_USER" 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" mkdir -p "$KEY_DIR"
cd "$KEY_DIR" cd "$KEY_DIR"
log_info "Prüfe auf vorhandene temporäre Schlüssel..." log_info "Prüfe auf vorhandene temporäre Schlüssel"
if [[ -f "$KEY_NAME" || -f "${KEY_NAME}.pub" || -f "${KEY_NAME}-cert.pub" ]]; then rm -f "$KEY_NAME" "$KEY_NAME.pub" "$KEY_NAME-cert.pub"
log_warn "Vorherige temporäre Schlüssel werden gelöscht..."
rm -f "$KEY_NAME" "$KEY_NAME.pub" "$KEY_NAME-cert.pub"
fi
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 ssh-keygen -f "$KEY_NAME" -N "" -C "$SSH_USER@temp" > /dev/null
log_info "Sende Public Key zur CA (${CA_HOST})..." 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/" || { scp -P "$CA_PORT" "${KEY_NAME}.pub" "${CA_USER}@${CA_HOST}:/tmp/" || {
log_error "Fehler beim Senden des Public Keys zur CA" log_error "Fehler beim Senden des Public Keys zur CA"
exit 1 exit 1
} }
log_info "Fordere Signatur von CA an..." log_info "Fordere Signatur von CA an..."
ssh -i "$CA_SSH_KEY" -p "$CA_PORT" "${CA_USER}@${CA_HOST}" \ ssh -i "$CA_KEY_PATH" -p "$CA_PORT" "${CA_USER}@${CA_HOST}" "$REMOTE_SIGN_SCRIPT /tmp/${KEY_NAME}.pub $SSH_USER $VALIDITY" || {
"$REMOTE_SIGN_SCRIPT /tmp/${KEY_NAME}.pub $SSH_USER $VALIDITY" || {
log_error "Fehler bei der Signierung durch die CA" log_error "Fehler bei der Signierung durch die CA"
exit 1 exit 1
} }
log_info "Lade signiertes Zertifikat von CA..." log_info "Lade signiertes Zertifikat von CA"
scp -i "$CA_SSH_KEY" -P "$CA_PORT" "${CA_USER}@${CA_HOST}:/tmp/${KEY_NAME}-cert.pub" . || { scp -P "$CA_PORT" "${CA_USER}@${CA_HOST}:/tmp/${KEY_NAME}-cert.pub" . || {
log_error "Fehler beim Abrufen des Zertifikats von der CA" log_error "Fehler beim Abrufen des Zertifikats von der CA"
exit 1 exit 1
} }
log_info "Zertifikat erfolgreich erhalten" log_info "Zertifikat erfolgreich erhalten starte SSH-Verbindung"
log_info "Starte SSH-Verbindung zum Zielsystem (${VM_ALIAS} / ${TARGET_HOST}) über Port ${TARGET_PORT}..."
ssh -p "$TARGET_PORT" -i "$KEY_NAME" "$SSH_USER@$TARGET_HOST" ssh -p "$TARGET_PORT" -i "$KEY_NAME" "$SSH_USER@$TARGET_HOST"
log_end "SSH Zertifikat Login" log_end "SSH-Login abgeschlossen"