Unterscheidung zwischen Servern, die nur mittel PublicKey und solchen, die mit zertifizierten PublicKeys verbunden werden. Die Unterscheidung findet in Zeile 83 statt. Server, die hier eingetragen sind, werden nur mit dem PublicKey, dessen Pfad in Zeile 27 ("SIMPLE_KEY") angegeben ist, verbunden.
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 id_ca (Standardpfad: ~/.ssh/id_ca) 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