2026-09-15 07:32:18 +00:00
2025-09-04 11:47:25 +00:00
2026-08-28 10:53:14 +00:00
2025-11-23 12:47:49 +00:00
2026-03-03 19:48:07 +00:00
2026-09-15 07:32:18 +00:00

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:

    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:

    chmod +x login.sh
    
  5. Log-Verzeichnis anlegen (falls nicht vorhanden):

    mkdir -p log
    
  6. 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

Description
ssh-Anmeldungen mit kurzlebigen zertifizierten Publickeys, mit gum
Readme 106 KiB
Languages
Shell 100%