Inital
This commit is contained in:
106
login.sh
Normal file
106
login.sh
Normal file
@ -0,0 +1,106 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
# Farben
|
||||
GREEN='\033[0;32m'
|
||||
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)"
|
||||
|
||||
# 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)
|
||||
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"
|
||||
KEY_NAME="temp_user_key"
|
||||
CA_SSH_KEY="$HOME/.ssh/id_ca"
|
||||
|
||||
# Gum Check
|
||||
if ! command -v gum &> /dev/null; then
|
||||
log_error "gum ist nicht installiert. Bitte zuerst installieren."
|
||||
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"
|
||||
fi
|
||||
|
||||
TARGET_PORT=$(gum input --placeholder "Ziel SSH Port" --value "2222")
|
||||
|
||||
VALIDITY_OPTIONS=("300" "600" "1800" "3600") # Sek. 5min, 10min, 30min, 1h
|
||||
VALIDITY=$(gum choose --header "Gültigkeitsdauer des Zertifikats wählen" "${VALIDITY_OPTIONS[@]}")
|
||||
|
||||
# Logge die Ziel-VM und den SSH-Benutzer
|
||||
log_info "Ziel-VM: $VM_ALIAS ($TARGET_HOST)"
|
||||
log_info "SSH-Benutzer: $SSH_USER"
|
||||
|
||||
# Keys 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 "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_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" || {
|
||||
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_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}..."
|
||||
|
||||
ssh -p "$TARGET_PORT" -i "$KEY_NAME" "$SSH_USER@$TARGET_HOST"
|
||||
|
||||
log_end "SSH Zertifikat Login"
|
||||
|
||||
Reference in New Issue
Block a user