290 lines
3.5 KiB
Markdown
290 lines
3.5 KiB
Markdown
# SSH-CA – Erinnerungszettel
|
||
|
||
## Grundidee
|
||
|
||
Ich verwende **OpenSSH-Zertifikate** anstelle von dauerhaft hinterlegten Public Keys auf meinen Servern.
|
||
|
||
Der **private CA-Schlüssel** befindet sich ausschließlich auf der **CA-VM**.
|
||
|
||
Alle Server kennen lediglich den **öffentlichen CA-Schlüssel** (`ca_key.pub`) und vertrauen damit allen von meiner CA ausgestellten Zertifikaten.
|
||
|
||
Dadurch muss ich **keine `authorized_keys` mehr pflegen**.
|
||
|
||
---
|
||
|
||
# Komponenten
|
||
|
||
## CA-VM
|
||
|
||
Enthält:
|
||
|
||
* privaten CA-Key (`ca_key`)
|
||
* öffentlichen CA-Key (`ca_key.pub`)
|
||
* `remote_sign.sh`
|
||
|
||
Aufgabe:
|
||
|
||
* Zertifiziert Public Keys.
|
||
|
||
---
|
||
|
||
## Client
|
||
|
||
Enthält:
|
||
|
||
* `login.sh`
|
||
* `certify.sh`
|
||
* `~/.ssh/id_ca` (Anmeldung an der CA)
|
||
* Logging
|
||
* `gum`
|
||
|
||
---
|
||
|
||
## Zielserver
|
||
|
||
Benötigen nur:
|
||
|
||
```
|
||
TrustedUserCAKeys /etc/ssh/trusted-user-ca-keys.pem
|
||
```
|
||
|
||
sowie
|
||
|
||
```
|
||
/etc/ssh/trusted-user-ca-keys.pem
|
||
```
|
||
|
||
mit dem Inhalt von
|
||
|
||
```
|
||
ca_key.pub
|
||
```
|
||
|
||
---
|
||
|
||
# Normaler Login
|
||
|
||
Einfach
|
||
|
||
```bash
|
||
./login.sh
|
||
```
|
||
|
||
Das Skript
|
||
|
||
1. erzeugt einen temporären Schlüssel,
|
||
2. sendet den Public Key zur CA,
|
||
3. lässt ihn signieren,
|
||
4. holt das Zertifikat zurück,
|
||
5. baut die SSH-Verbindung auf.
|
||
|
||
---
|
||
|
||
# Vorhandenen Schlüssel signieren
|
||
|
||
```bash
|
||
./certify.sh
|
||
```
|
||
|
||
Danach
|
||
|
||
* Public Key auswählen
|
||
* Benutzer (Principals) auswählen
|
||
* Gültigkeit auswählen
|
||
|
||
Das Zertifikat wird automatisch erzeugt und neben dem Schlüssel gespeichert.
|
||
|
||
Prüfen:
|
||
|
||
```bash
|
||
ssh-keygen -L -f ~/.ssh/<key>-cert.pub
|
||
```
|
||
|
||
---
|
||
|
||
# ToDo: Neues Gerät hinzufügen
|
||
|
||
## 1. SSH installieren
|
||
|
||
Falls nötig.
|
||
|
||
---
|
||
|
||
## 2. Öffentlichen CA-Schlüssel kopieren
|
||
|
||
```
|
||
ca_key.pub
|
||
```
|
||
|
||
nach
|
||
|
||
```
|
||
/etc/ssh/trusted-user-ca-keys.pem
|
||
```
|
||
|
||
---
|
||
|
||
## 3. SSH konfigurieren
|
||
|
||
Falls vorhanden:
|
||
|
||
```
|
||
/etc/ssh/sshd_config.d/ca.conf
|
||
```
|
||
|
||
Inhalt:
|
||
|
||
```
|
||
TrustedUserCAKeys /etc/ssh/trusted-user-ca-keys.pem
|
||
```
|
||
|
||
Alternativ den Eintrag direkt in die
|
||
|
||
```
|
||
/etc/ssh/sshd_config
|
||
```
|
||
|
||
aufnehmen.
|
||
|
||
---
|
||
|
||
## 4. SSH neu laden
|
||
|
||
```bash
|
||
sudo systemctl restart ssh
|
||
```
|
||
|
||
oder
|
||
|
||
```bash
|
||
sudo systemctl restart sshd
|
||
```
|
||
|
||
---
|
||
|
||
## 5. Konfiguration prüfen
|
||
|
||
```bash
|
||
sudo sshd -t
|
||
```
|
||
|
||
und
|
||
|
||
```bash
|
||
sudo sshd -T | grep trustedusercakeys
|
||
```
|
||
|
||
---
|
||
|
||
## 6. Testlogin
|
||
|
||
Mit
|
||
|
||
```bash
|
||
./login.sh
|
||
```
|
||
|
||
---
|
||
|
||
# ToDo: Schlüssel per Hand signieren
|
||
|
||
## Public Key hochladen
|
||
|
||
```bash
|
||
scp -i ~/.ssh/id_ca ~/.ssh/id_ed25519.pub alf@<CA-IP>:/tmp/
|
||
```
|
||
|
||
---
|
||
|
||
## Signieren
|
||
|
||
```bash
|
||
ssh -i ~/.ssh/id_ca alf@<CA-IP>
|
||
```
|
||
|
||
```bash
|
||
/home/alf/remote_sign.sh /tmp/id_ed25519.pub alf 3600
|
||
```
|
||
|
||
Mehrere Benutzer:
|
||
|
||
```bash
|
||
/home/alf/remote_sign.sh /tmp/id_ed25519.pub alf,root,oberkoetter 3600
|
||
```
|
||
|
||
---
|
||
|
||
## Zertifikat zurückholen
|
||
|
||
```bash
|
||
scp -i ~/.ssh/id_ca \
|
||
alf@<CA-IP>:/tmp/id_ed25519-cert.pub \
|
||
~/.ssh/
|
||
```
|
||
|
||
---
|
||
|
||
## Zertifikat prüfen
|
||
|
||
```bash
|
||
ssh-keygen -L -f ~/.ssh/id_ed25519-cert.pub
|
||
```
|
||
|
||
---
|
||
|
||
# Nützliche Befehle
|
||
|
||
## Zertifikat anzeigen
|
||
|
||
```bash
|
||
ssh-keygen -L -f <zertifikat>
|
||
```
|
||
|
||
---
|
||
|
||
## SSH-Konfiguration prüfen
|
||
|
||
```bash
|
||
sudo sshd -t
|
||
```
|
||
|
||
---
|
||
|
||
## Effektive SSH-Konfiguration
|
||
|
||
```bash
|
||
sudo sshd -T
|
||
```
|
||
|
||
---
|
||
|
||
## CA-Eintrag kontrollieren
|
||
|
||
```bash
|
||
sudo sshd -T | grep trustedusercakeys
|
||
```
|
||
|
||
---
|
||
|
||
# Wichtig
|
||
|
||
✔ Der **private CA-Key** verlässt niemals die CA-VM.
|
||
|
||
✔ Auf den Servern liegt ausschließlich der **öffentliche CA-Key**.
|
||
|
||
✔ Zertifikate sind nur kurz gültig.
|
||
|
||
✔ Neue Server benötigen lediglich den öffentlichen CA-Key und den Eintrag `TrustedUserCAKeys`.
|
||
|
||
✔ Neue Benutzer müssen nicht mehr in `authorized_keys` verteilt werden.
|
||
|
||
---
|
||
|
||
# Nächste Ausbaustufen
|
||
|
||
* Ansible-Rolle für neue Server
|
||
* Gemeinsame `config.sh`
|
||
* Gemeinsame `lib.sh`
|
||
* Automatische Pflege der `~/.ssh/config`
|
||
* Optional Weboberfläche für die CA
|