147 lines
4.1 KiB
Markdown
147 lines
4.1 KiB
Markdown
# 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.
|
||
|
||
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 (z.B. via `brew install gum` oder Snap/Paketmanager)
|
||
|
||
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 |