Compare commits
35 Commits
908449f005
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| a6920c5a27 | |||
| 252da4cc76 | |||
| 9c3fb71f98 | |||
| 15cf1dd22b | |||
| fd2989d438 | |||
| f5bc23801b | |||
| ad8862a479 | |||
| 805902ca3d | |||
| 2006178a48 | |||
| 64b809c7e5 | |||
| bd60a23f92 | |||
| 0da8269097 | |||
| a09e7bc912 | |||
| 783f26102d | |||
| 5efa222aec | |||
| 209648e346 | |||
| 2f9b5d43a2 | |||
| 9365f7622a | |||
| b4eb2a54d2 | |||
| 3102a9fc76 | |||
| 2b2a0434ab | |||
| 18c207b771 | |||
| 63ac5b74d1 | |||
| 0b05112d36 | |||
| de52b1181a | |||
| f12d06dcbd | |||
| f03d2b33b2 | |||
| 7899c24242 | |||
| 6c2ae7637b | |||
| d2d50149ba | |||
| 38c23e5193 | |||
| 3f0a97eb92 | |||
| 626f4b6711 | |||
| 0d0f62640b | |||
| 21d9665830 |
25
.gitignore
vendored
Normal file
25
.gitignore
vendored
Normal file
@ -0,0 +1,25 @@
|
||||
# Log-Verzeichnis und Dateien (Logdateien nie committen)
|
||||
log/
|
||||
*.log
|
||||
|
||||
# Temporäre SSH Keys
|
||||
temp_keys/
|
||||
|
||||
# MacOS Finder Files
|
||||
.DS_Store
|
||||
|
||||
# Vim Swap Files
|
||||
*.swp
|
||||
|
||||
# Backup Files
|
||||
*~
|
||||
|
||||
# Ausgewählte Editor- oder IDE-Settings (falls verwendet)
|
||||
.vscode/
|
||||
.idea/
|
||||
|
||||
# Private Schlüssel (falls aus Versehen im Projektverzeichnis)
|
||||
*.pem
|
||||
*.key
|
||||
id_ca
|
||||
|
||||
153
README.md
Normal file
153
README.md
Normal file
@ -0,0 +1,153 @@
|
||||
# SSH-Zertifikats-Login mit zentraler CA
|
||||
|
||||
Dieses Projekt ermöglicht eine einfache und sichere Anmeldung per SSH auf mehreren Servern über kurzzeitige, von einer zentralen Zertifizierungsstelle (CA) signierte SSH-Zertifikate.
|
||||
|
||||
---
|
||||
|
||||
## Features
|
||||
|
||||
- Zentrale SSH CA zur Signierung temporärer SSH-Schlüssel
|
||||
- Automatisches Erzeugen und Signieren von SSH-Keys
|
||||
- Interaktive Auswahl der Ziel-VM, des Benutzers und der Zertifikatsgültigkeit über `gum`
|
||||
- Logging aller wichtigen Aktionen (Konsole + Logdatei)
|
||||
- Schutz der privaten CA-Schlüssel durch zentrale Signatur-VM
|
||||
- Flexible Erweiterbarkeit
|
||||
|
||||
---
|
||||
|
||||
## Verzeichnisstruktur
|
||||
|
||||
```
|
||||
.
|
||||
├── log/ # Logs und Logging-Script
|
||||
│ ├── logging.sh
|
||||
│ └── ssh-cert-login.log
|
||||
├── temp_keys/ # Temporäre SSH-Schlüssel werden hier erzeugt
|
||||
├── login.sh # Hauptscript für Zertifikatserstellung und SSH-Login
|
||||
├── remote_sign.sh # Remote-Skript auf der CA-VM zur Signatur
|
||||
├── .gitignore # Git Ignore für Logs, temporäre Keys, etc.
|
||||
└── README.md # Diese Datei
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Voraussetzungen
|
||||
|
||||
- Bash unter Linux/macOS
|
||||
- `ssh` und `ssh-keygen`
|
||||
- `scp` für Dateiübertragungen
|
||||
- `gum` (https://github.com/charmbracelet/gum) für das interaktive Terminal-Menü
|
||||
- Zugriff auf eine CA-VM mit privatem CA-Key und dem `remote_sign.sh` Script
|
||||
- SSH-Key für Anmeldung an der CA-VM (`id_ca` o.ä.)
|
||||
|
||||
### Hinweis zur CA-Authentifizierung
|
||||
|
||||
Das Skript prüft automatisch, ob der SSH-Private-Key `ca_key.pub` (Standardpfad: `~/.ssh/ca_key.pub`) vorhanden ist.
|
||||
Dieser Schlüssel wird zur Authentifizierung auf der CA-VM benötigt, um die Signaturanfrage abzusenden. Muss lokal per ssh-keygen erstellt und mit ssh-copy-id auf die CA übertragen werden.
|
||||
|
||||
Falls die Datei nicht vorhanden ist, bricht das Skript mit einer Fehlermeldung ab.
|
||||
|
||||
👉 **Lösung:** Stelle sicher, dass sich dein Private Key `id_ca` im richtigen Verzeichnis befindet und per `chmod 600 ~/.ssh/id_ca` korrekt geschützt ist. Optional kannst du den Pfad im Skript `login.sh` anpassen, falls du einen anderen Schlüssel verwenden möchtest.
|
||||
|
||||
---
|
||||
|
||||
## Installation
|
||||
|
||||
1. `gum` installieren:
|
||||
```bash
|
||||
sudo mkdir -p /etc/apt/keyrings
|
||||
curl -fsSL https://repo.charm.sh/apt/gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/charm.gpg
|
||||
echo "deb [signed-by=/etc/apt/keyrings/charm.gpg] https://repo.charm.sh/apt/ * *" | sudo tee /etc/apt/sources.list.d/charm.list
|
||||
sudo apt update && sudo apt install gum
|
||||
```
|
||||
|
||||
2. Alle Skripte und Verzeichnisse in ein Git-Repository klonen oder kopieren
|
||||
|
||||
3. CA-VM korrekt konfigurieren (privater CA-Key, `remote_sign.sh`)
|
||||
|
||||
4. `login.sh` ausführbar machen:
|
||||
```bash
|
||||
chmod +x login.sh
|
||||
```
|
||||
|
||||
5. Log-Verzeichnis anlegen (falls nicht vorhanden):
|
||||
```bash
|
||||
mkdir -p log
|
||||
```
|
||||
|
||||
6. Im Log-Verzeichnis die Datei rotate.cfg anlegen, meist mit diesen Parametern:
|
||||
```bash
|
||||
/var/log/my_app/*.log {
|
||||
daily
|
||||
rotate 7
|
||||
compress
|
||||
missingok
|
||||
notifempty
|
||||
dateext
|
||||
}
|
||||
```
|
||||
---
|
||||
|
||||
## Nutzung
|
||||
|
||||
Starte das Login-Skript:
|
||||
|
||||
```bash
|
||||
./login.sh
|
||||
```
|
||||
|
||||
- Wähle die Ziel-VM aus der Liste
|
||||
- Wähle den SSH-Benutzer (vordefiniert oder eigene Eingabe)
|
||||
- Wähle die Gültigkeitsdauer des Zertifikats
|
||||
- Das Skript generiert einen temporären SSH-Key, sendet den Public Key zur CA, holt das signierte Zertifikat zurück und startet die SSH-Verbindung zum Ziel
|
||||
|
||||
---
|
||||
|
||||
## Sicherheitshinweise
|
||||
|
||||
- Der private CA-Schlüssel sollte ausschließlich auf der CA-VM gespeichert und geschützt werden
|
||||
- Temporäre SSH-Keys sind nur kurz gültig (Standard 5 Minuten)
|
||||
- Logdateien enthalten keine privaten Schlüssel, aber Pfadangaben und Benutzerinformationen – vor unberechtigtem Zugriff schützen
|
||||
|
||||
---
|
||||
|
||||
## Lizenz
|
||||
|
||||
MIT License (oder nach Wunsch anpassen)
|
||||
|
||||
---
|
||||
|
||||
## Kontakt
|
||||
|
||||
Bei Fragen oder Problemen gerne melden!
|
||||
|
||||
---
|
||||
|
||||
**Viel Erfolg mit deinem zentralen SSH-Zertifikats-Login!**
|
||||
|
||||
|
||||
---
|
||||
|
||||
## Gum installieren (falls nicht vorhanden)
|
||||
|
||||
Falls `gum` noch nicht installiert ist, kannst du es direkt von GitHub beziehen:
|
||||
|
||||
```bash
|
||||
# Neueste Version ermitteln
|
||||
GUM_VERSION=$(curl -s https://api.github.com/repos/charmbracelet/gum/releases/latest | grep tag_name | cut -d '"' -f 4)
|
||||
|
||||
# Download für Linux x86_64
|
||||
curl -L "https://github.com/charmbracelet/gum/releases/download/${GUM_VERSION}/gum_${GUM_VERSION#v}_Linux_x86_64.tar.gz" -o gum.tar.gz
|
||||
|
||||
# Entpacken
|
||||
tar -xzf gum.tar.gz
|
||||
|
||||
# Nach /usr/local/bin verschieben
|
||||
sudo install gum /usr/local/bin
|
||||
|
||||
# Testen
|
||||
gum --version
|
||||
```
|
||||
|
||||
Alternativ findest du alle Releases unter:
|
||||
👉 https://github.com/charmbracelet/gum/releases
|
||||
38
id_ca
38
id_ca
@ -1,38 +0,0 @@
|
||||
-----BEGIN OPENSSH PRIVATE KEY-----
|
||||
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
|
||||
-----END OPENSSH PRIVATE KEY-----
|
||||
@ -1 +0,0 @@
|
||||
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC2VrWLyOnW5eHKAASFtxvHEnvL1unTHHsvb4ndNAxmhU+4gOMddRvghFymcQS4VmqIErCOKHg36AjzPp3oBw9AL1HPw7nf+SUbZQi9iKhbs1+lC0fNqRQm9CY4t+tjAC8AwxN4os1yvVwmyXqaFTaArRAk1BCOP2gQBr7OmO0ECVTtXXKjyAxnvp/4GouU9KTjs+tDAYbcQz5H6yXlwhDjqO65X1HBC61wDo8FTqeIWI215j0pfgE5YNURJgOkmjcs34IxrgyRt32fKaXZNXRbDOc1OAwAm3Sk7yGiuwTohp5HsnYp8yQjTz50OlyZuyT1g3y5Dkz5ISKsZeQ2Uag9DLjhXxAUF8G2oFOs0z9IU9LKrv89A9xDUFsoMtI6dnUAOHWBhyUDxSgYWT87bmsUoHZ17zyp2I6QzG6olGH5bUoq/ApuxfnTvIie/ZeVoC0jPvys4MOPMANNJNNrSkO++2vy6eOhcEvSWaFkg8oHabOr4cCblueIFhV+sp6ObDM= oberkoetter@PC7-77
|
||||
@ -1,32 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
DEFAULT_LOG_FILE="./log/log.txt"
|
||||
ACTIVE_LOG_FILE="/home/oberkoetter/Dokumente/Git/log.txt"
|
||||
|
||||
log_init() {
|
||||
ACTIVE_LOG_FILE="${1:-$DEFAULT_LOG_FILE}"
|
||||
mkdir -p "$(dirname "${ACTIVE_LOG_FILE}")"
|
||||
}
|
||||
|
||||
_log_dual() {
|
||||
local level="$1"
|
||||
local message="$2"
|
||||
local timestamp
|
||||
timestamp="$(date '+%Y-%m-%d %H:%M:%S')"
|
||||
local line="${timestamp} [${level}] ${message}"
|
||||
|
||||
echo "$line" # Konsole
|
||||
echo "$line" >> "${ACTIVE_LOG_FILE}" # Logdatei
|
||||
}
|
||||
|
||||
log_info() { _log_dual "INFO" "$1"; }
|
||||
log_warn() { _log_dual "WARN" "$1"; }
|
||||
log_error() { _log_dual "ERROR" "$1"; }
|
||||
log_start() {
|
||||
echo "" | tee -a "${ACTIVE_LOG_FILE}"
|
||||
_log_dual "START" "--- $1 gestartet ---"
|
||||
}
|
||||
log_end() {
|
||||
_log_dual "END" "--- $1 abgeschlossen ---"
|
||||
echo "" | tee -a "${ACTIVE_LOG_FILE}"
|
||||
}
|
||||
@ -1,38 +0,0 @@
|
||||
|
||||
2025-07-03 11:47:05 [START] --- SSH Zertifikat Login gestartet ---
|
||||
2025-07-03 11:47:08 [INFO] Prüfe auf vorhandene temporäre Schlüssel...
|
||||
2025-07-03 11:47:08 [WARN] Vorherige temporäre Schlüssel werden gelöscht...
|
||||
2025-07-03 11:47:08 [INFO] Generiere temporären SSH-Key...
|
||||
2025-07-03 11:47:08 [INFO] Sende Public Key zur CA (100.87.87.5)...
|
||||
2025-07-03 11:47:09 [INFO] Fordere Signatur von CA an...
|
||||
2025-07-03 11:47:09 [INFO] Lade signiertes Zertifikat von CA...
|
||||
2025-07-03 11:47:10 [INFO] Zertifikat erfolgreich erhalten
|
||||
2025-07-03 11:47:10 [INFO] Starte SSH-Verbindung zum Zielsystem (OMV2000 / 100.87.87.81) über Port 2222...
|
||||
|
||||
2025-07-03 11:49:53 [START] --- SSH Zertifikat Login gestartet ---
|
||||
2025-07-03 11:50:04 [INFO] Prüfe auf vorhandene temporäre Schlüssel...
|
||||
2025-07-03 11:50:04 [WARN] Vorherige temporäre Schlüssel werden gelöscht...
|
||||
2025-07-03 11:50:04 [INFO] Generiere temporären SSH-Key...
|
||||
2025-07-03 11:50:04 [INFO] Sende Public Key zur CA (100.87.87.5)...
|
||||
2025-07-03 11:50:05 [INFO] Fordere Signatur von CA an...
|
||||
2025-07-03 11:50:05 [INFO] Lade signiertes Zertifikat von CA...
|
||||
2025-07-03 11:50:06 [INFO] Zertifikat erfolgreich erhalten
|
||||
2025-07-03 11:50:06 [INFO] Starte SSH-Verbindung zum Zielsystem (OMVPi / 100.87.87.80) über Port 2222...
|
||||
2025-07-03 11:50:15 [END] --- SSH Zertifikat Login abgeschlossen ---
|
||||
|
||||
|
||||
2025-07-03 11:51:58 [START] --- SSH Zertifikat Login gestartet ---
|
||||
|
||||
2025-07-03 11:54:27 [START] --- SSH Zertifikat Login gestartet ---
|
||||
2025-07-03 11:54:32 [INFO] Ziel-VM: OMV2000 (100.87.87.81)
|
||||
2025-07-03 11:54:32 [INFO] SSH-Benutzer: alf
|
||||
2025-07-03 11:54:32 [INFO] Prüfe auf vorhandene temporäre Schlüssel...
|
||||
2025-07-03 11:54:32 [WARN] Vorherige temporäre Schlüssel werden gelöscht...
|
||||
2025-07-03 11:54:32 [INFO] Generiere temporären SSH-Key...
|
||||
2025-07-03 11:54:33 [INFO] Sende Public Key zur CA (100.87.87.5)...
|
||||
2025-07-03 11:54:33 [INFO] Fordere Signatur von CA an...
|
||||
2025-07-03 11:54:34 [INFO] Lade signiertes Zertifikat von CA...
|
||||
2025-07-03 11:54:34 [INFO] Zertifikat erfolgreich erhalten
|
||||
2025-07-03 11:54:34 [INFO] Starte SSH-Verbindung zum Zielsystem (OMV2000 / 100.87.87.81) über Port 2222...
|
||||
2025-07-03 11:54:37 [END] --- SSH Zertifikat Login abgeschlossen ---
|
||||
|
||||
158
login.sh
Normal file → Executable file
158
login.sh
Normal file → Executable file
@ -1,5 +1,12 @@
|
||||
#!/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'
|
||||
@ -7,100 +14,121 @@ 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"
|
||||
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"
|
||||
CA_SSH_KEY="$HOME/.ssh/id_ca"
|
||||
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
|
||||
log_error "gum ist nicht installiert. Bitte zuerst installieren."
|
||||
echo -e "${RED}[!] gum ist nicht installiert. Bitte zuerst installieren.${NC}"
|
||||
log_error "GUM nicht installiert!"
|
||||
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"
|
||||
|
||||
# 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"
|
||||
)
|
||||
|
||||
# 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]}"
|
||||
TARGET_LABEL=$(gum choose --header "Zielsystem wählen" "${!HOSTS[@]}")
|
||||
|
||||
# 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
|
||||
# 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: $?"
|
||||
;;
|
||||
|
||||
TARGET_PORT=$(gum input --placeholder "Ziel SSH Port" --value "2222")
|
||||
"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: $?"
|
||||
;;
|
||||
|
||||
VALIDITY_OPTIONS=("300" "600" "1800" "3600") # Sek. 5min, 10min, 30min, 1h
|
||||
VALIDITY=$(gum choose --header "Gültigkeitsdauer des Zertifikats wählen" "${VALIDITY_OPTIONS[@]}")
|
||||
*)
|
||||
TARGET_HOST="${HOSTS[$TARGET_LABEL]}"
|
||||
log_info "Zielsystem gewählt: $TARGET_LABEL ($TARGET_HOST)"
|
||||
|
||||
# Logge die Ziel-VM und den SSH-Benutzer
|
||||
log_info "Ziel-VM: $VM_ALIAS ($TARGET_HOST)"
|
||||
log_info "SSH-Benutzer: $SSH_USER"
|
||||
TARGET_PORT=$(gum input --placeholder "Ziel SSH Port" --value "2222")
|
||||
log_info "SSH-Port: $TARGET_PORT"
|
||||
|
||||
# Keys vorbereiten
|
||||
mkdir -p "$KEY_DIR"
|
||||
cd "$KEY_DIR"
|
||||
# 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"
|
||||
|
||||
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..."
|
||||
# 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"
|
||||
fi
|
||||
|
||||
log_info "Generiere temporären SSH-Key..."
|
||||
ssh-keygen -f "$KEY_NAME" -N "" -C "$SSH_USER@temp" > /dev/null
|
||||
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" -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_SSH_KEY" -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 -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" -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"
|
||||
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"
|
||||
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"
|
||||
|
||||
@ -1,38 +0,0 @@
|
||||
-----BEGIN OPENSSH PRIVATE KEY-----
|
||||
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
|
||||
VhlZkbuHP7Ij6/AAAACGFsZkB0ZW1wAQI=
|
||||
-----END OPENSSH PRIVATE KEY-----
|
||||
@ -1 +0,0 @@
|
||||
ssh-rsa-cert-v01@openssh.com AAAAHHNzaC1yc2EtY2VydC12MDFAb3BlbnNzaC5jb20AAAAgGTwdiJJUP22VvYUC8dFTrFdNXEYzCWdPTphQXTEL3ZEAAAADAQABAAABgQC5YUgbzbGMY4JLNLwNKNJNikD/ywOuCEKFvLArZ9wzZq2NI3rKKsY7RRjQLgNwlCTd2V9nWJl2Vy9gUrGcivX+2Rhi9ErJ0iFxjgJDl/LTCbJ76MkJ0VDQ/TPYOro2FOSu8Hrd5PIEyNAi71Ql3hBaWEKc98VT5nUjudul4ys2n6DB23bErqUYWJNqB8hZ0nPqV4108tSglU+Fryz4hI9b31hmWpEUYRBndCAIz1aB6sJr0P5KyjFiTraF9NiHvb9Z6fYZAQ4N2QqBeCdn/MciL/4DfHIoTOEoaFUJ+cwWMznvty0HJP2GqOILiLeDdNo5FYLoga7z7SblAldNIkvqTgKgGrlKxAfSS9eKNhzgOReKmXPeu5B7VoTQEHIXD5wDLzT4ttwtO4mIK6f/gSLXA4aZa2mbKikD3GDmkHim4UT9aSRaHxlBUGEZyO1z8Dbx/sLW6Gjkrai314yONyz9dJ5P2SlXknh4TwtPi+gqeX22PNDRfu/rRTR51Q4TmfkAAAAAaGZTWgAAAAEAAAAIYWxmQHRlbXAAAAAHAAAAA2FsZgAAAABoZlNaAAAAAGhmVIYAAAAAAAAAggAAABVwZXJtaXQtWDExLWZvcndhcmRpbmcAAAAAAAAAF3Blcm1pdC1hZ2VudC1mb3J3YXJkaW5nAAAAAAAAABZwZXJtaXQtcG9ydC1mb3J3YXJkaW5nAAAAAAAAAApwZXJtaXQtcHR5AAAAAAAAAA5wZXJtaXQtdXNlci1yYwAAAAAAAAAAAAAAMwAAAAtzc2gtZWQyNTUxOQAAACDkXho6TJBA0jVBiBC/22LEDc7bK38jz5cumjWzD5GeygAAAFMAAAALc3NoLWVkMjU1MTkAAABAX2QrrUPwT4roHUoyk78lGCyVSVjELYkcepTlO4DVgxICCM4reIxlqb12/a9csWj+KPADhWAttoLhunTuoXLODw== alf@temp
|
||||
@ -1 +0,0 @@
|
||||
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC5YUgbzbGMY4JLNLwNKNJNikD/ywOuCEKFvLArZ9wzZq2NI3rKKsY7RRjQLgNwlCTd2V9nWJl2Vy9gUrGcivX+2Rhi9ErJ0iFxjgJDl/LTCbJ76MkJ0VDQ/TPYOro2FOSu8Hrd5PIEyNAi71Ql3hBaWEKc98VT5nUjudul4ys2n6DB23bErqUYWJNqB8hZ0nPqV4108tSglU+Fryz4hI9b31hmWpEUYRBndCAIz1aB6sJr0P5KyjFiTraF9NiHvb9Z6fYZAQ4N2QqBeCdn/MciL/4DfHIoTOEoaFUJ+cwWMznvty0HJP2GqOILiLeDdNo5FYLoga7z7SblAldNIkvqTgKgGrlKxAfSS9eKNhzgOReKmXPeu5B7VoTQEHIXD5wDLzT4ttwtO4mIK6f/gSLXA4aZa2mbKikD3GDmkHim4UT9aSRaHxlBUGEZyO1z8Dbx/sLW6Gjkrai314yONyz9dJ5P2SlXknh4TwtPi+gqeX22PNDRfu/rRTR51Q4Tmfk= alf@temp
|
||||
Reference in New Issue
Block a user