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
sshundssh-keygenscpfür Dateiübertragungengum(https://github.com/charmbracelet/gum) für das interaktive Terminal-Menü- Zugriff auf eine CA-VM mit privatem CA-Key und dem
remote_sign.shScript - SSH-Key für Anmeldung an der CA-VM (
id_cao.ä.)
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
-
guminstallieren: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 -
Alle Skripte und Verzeichnisse in ein Git-Repository klonen oder kopieren
-
CA-VM korrekt konfigurieren (privater CA-Key,
remote_sign.sh) -
login.shausführbar machen:chmod +x login.sh -
Log-Verzeichnis anlegen (falls nicht vorhanden):
mkdir -p log -
Im Log-Verzeichnis die Datei rotate.cfg anlegen, meist mit diesen Parametern:
/var/log/my_app/*.log { daily rotate 7 compress missingok notifempty dateext }
Nutzung
Starte das Login-Skript:
./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:
# 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