Spickzettel.md hinzugefügt
This commit is contained in:
289
Spickzettel.md
Normal file
289
Spickzettel.md
Normal file
@ -0,0 +1,289 @@
|
|||||||
|
# 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
|
||||||
Reference in New Issue
Block a user