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