100 lines
3.0 KiB
Markdown
100 lines
3.0 KiB
Markdown
# SSH-Zertifikatsbasierter Login mit temporären Benutzer-Zertifikaten
|
||
|
||
Dieses Repository enthält ein Bash-basiertes System zur Nutzung von SSH-Zertifikaten für den Login auf Zielsysteme. Ein zentraler Zertifizierungsserver (CA-VM) signiert temporäre SSH-Schlüssel, die anschließend zum kurzzeitigen Login verwendet werden.
|
||
|
||
## ✨ Features
|
||
|
||
- Automatisches Erzeugen eines temporären SSH-Keypairs
|
||
- Zertifizierung des Public Keys über zentrale CA (Zertifikatslaufzeit konfigurierbar)
|
||
- Automatischer Login auf Ziel-VM mit dem zertifizierten Key
|
||
- Optionale Unterstützung für agent-forwarding und Passwort-lose Nutzung
|
||
- Sicherheit durch kurze Zertifikatsgültigkeit (z. B. 5 Minuten)
|
||
|
||
---
|
||
|
||
## 📁 Dateien
|
||
|
||
### `get_cert_and_connect.sh`
|
||
|
||
Das Hauptskript, das:
|
||
|
||
1. ein temporäres SSH-Schlüsselpaar erzeugt
|
||
2. den Public Key zur CA überträgt
|
||
3. dort signieren lässt
|
||
4. das signierte Zertifikat abruft
|
||
5. sich mit dem temporären Schlüssel+Zertifikat auf die Ziel-VM verbindet
|
||
|
||
### `remote_sign.sh`
|
||
|
||
Wird auf der **CA-VM** abgelegt. Dieses Skript signiert einen übergebenen Public Key mit dem CA-Schlüssel für einen bestimmten Nutzer und eine begrenzte Zeitspanne.
|
||
|
||
---
|
||
|
||
## ⚙️ Voraussetzungen
|
||
|
||
### Auf der CA-VM:
|
||
|
||
- Der CA-Key (`ca_key`) befindet sich auf der CA-VM unter `/home/alf/ca_key`
|
||
- Die Datei `remote_sign.sh` ist dort vorhanden und **ausführbar**
|
||
- Optional: SSH-Agent mit geladener Passphrase (oder Passphrase entfernen)
|
||
|
||
### Auf dem Client (Rechner 1):
|
||
|
||
- SSH-Zugriff auf die CA-VM (z. B. `ssh alf@ca-vm`)
|
||
- SSH-Zugriff auf das Zielsystem
|
||
- `scp`, `ssh`, `ssh-keygen` verfügbar
|
||
- Agent-Weiterleitung (optional, aber empfohlen)
|
||
|
||
---
|
||
|
||
## 🚀 Nutzung
|
||
|
||
Führe auf deinem lokalen Rechner das Hauptskript aus:
|
||
|
||
```
|
||
./get_cert_and_connect.sh
|
||
```
|
||
|
||
Das Skript erledigt folgende Schritte automatisch:
|
||
|
||
1. Generiert ein temporäres SSH-Schlüsselpaar
|
||
2. Überträgt den Public Key zur CA-VM
|
||
3. Lässt den Key dort signieren (Zertifikat wird erstellt)
|
||
4. Holt das Zertifikat wieder ab
|
||
5. Verwendet den temporären Key + Zertifikat für den SSH-Login zur Ziel-VM
|
||
|
||
---
|
||
|
||
## 🔐 Sicherheitshinweise
|
||
|
||
- Zertifikate sind standardmäßig **nur 5 Minuten gültig** (konfigurierbar)
|
||
- Der private CA-Schlüssel auf der CA-VM sollte durch Dateiberechtigungen geschützt sein (`chmod 600`)
|
||
- Wenn der CA-Key passwortgeschützt ist:
|
||
- entweder `ssh-agent` verwenden und Agent-Zugriff erlauben
|
||
- oder bewusst auf Passphrase verzichten (nur bei gut abgesicherter CA-VM)
|
||
- **Agent-Weiterleitung (`ssh -A`)** wird unterstützt und empfohlen
|
||
|
||
---
|
||
|
||
## 🧪 Beispielhafte Konfiguration (`sshd_config` auf Ziel-VM)
|
||
|
||
```conf
|
||
# Für nutzerbasierte Zertifikatsauthentifizierung:
|
||
TrustedUserCAKeys /etc/ssh/user_ca.pub
|
||
|
||
# Nur Zertifikats-Login erlauben (optional):
|
||
PubkeyAuthentication yes
|
||
AuthorizedKeysFile none
|
||
```
|
||
|
||
Vergiss nicht, den CA-Public-Key (`ca_key.pub`) auf dem Zielsystem unter `/etc/ssh/user_ca.pub` abzulegen und den SSH-Dienst neu zu starten:
|
||
|
||
```
|
||
sudo systemctl restart sshd
|
||
```
|
||
|
||
---
|
||
|
||
## 📦 Lizenz
|
||
|
||
MIT License – siehe [LICENSE](LICENSE) |