2025-11-23 12:12:29 +00:00
2025-09-04 11:47:25 +00:00
2025-11-23 12:12:29 +00:00
2025-10-16 20:20:07 +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 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

  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 99 KiB
Languages
Shell 100%