135 lines
4.1 KiB
Bash
Executable File
135 lines
4.1 KiB
Bash
Executable File
#!/bin/bash
|
||
set -e
|
||
GIT_PFAD="$HOME/Gitea"
|
||
source $GIT_PFAD/logger/logger.sh
|
||
|
||
LOGBUCH="$GIT_PFAD/logger/Logs/ssh-login.log"
|
||
log_init "$LOGBUCH"
|
||
log_start
|
||
log_info "Starte sshlogin…"
|
||
|
||
# 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=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
|
||
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"
|
||
["Server3"]="100.87.87.103"
|
||
["ABS"]="100.87.87.102"
|
||
["OMVPi"]="100.87.87.80"
|
||
["OMV2000"]="100.87.87.81"
|
||
["CA"]="100.87.87.5"
|
||
["PHOSCON"]="100.87.87.90"
|
||
["DIETPI"]="100.87.87.4"
|
||
["PROXI"]="100.87.87.100"
|
||
["MATE3"]="100.87.87.108"
|
||
["PC77"]="100.87.87.77"
|
||
["Nextcloud PTV"]="cloud.ptv-euregio.de"
|
||
["Nextcloud Alf"]="wralto.org"
|
||
["SPZSSH"]="alsdorf.spznord.de"
|
||
)
|
||
|
||
TARGET_LABEL=$(gum choose --header "Zielsystem wählen" "${!HOSTS[@]}")
|
||
|
||
|
||
# Hier unterscheiden zwischen Servern, die mittels einfachem PublicKey-Verfahren und solchen, die per zertifiziertem Schlüssel angesteuert werden.
|
||
case $TARGET_LABEL in
|
||
"Nextcloud Alf")
|
||
log_info "Einfaches Login Nextcloud3"
|
||
ssh ssh-test90969@wralto.org
|
||
log_info "Nextcloud3 fertig. ERR: $?"
|
||
;;
|
||
|
||
"Nextcloud PTV" | "SPZSSH")
|
||
log_info "Einfaches Login mit statischen PublicKey..."
|
||
TARGET_PORT="22"
|
||
ssh -p "$TARGET_PORT" -i "$SIMPLE_KEY" "$SSH_USER@$TARGET_HOST"
|
||
log_info " ERR: $?"
|
||
;;
|
||
|
||
*)
|
||
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"
|
||
;;
|
||
esac
|
||
|
||
log_end "SSH-Login abgeschlossen"
|