# 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