# ssh-keygen — SSH-Schlüssel erzeugen und verwalten

> Praxis-Guide zu ssh-keygen — Ed25519- und RSA-Schlüsselpaare erstellen, Passphrasen verwalten, known_hosts pflegen und SSH-Zertifikate ausstellen.

Source: https://www.jpkc.com/db/cheatsheets/networking/ssh-keygen/

<!-- PROSE:intro -->
`ssh-keygen` ist das Standardwerkzeug von OpenSSH zum Erzeugen und Verwalten von SSH-Schlüsselpaaren. Mit einem einzigen Befehl erzeugst du ein modernes Ed25519- oder klassisches RSA-Schlüsselpaar, schützt es mit einer Passphrase und hinterlegst den öffentlichen Schlüssel auf dem Server – ab dann meldest du dich passwortlos an. Daneben verwaltest du `known_hosts`, prüfst Fingerabdrücke und kannst mit SSH-Zertifikaten eine skalierbare CA-Infrastruktur aufbauen.
<!-- PROSE:intro:end -->

## Schlüssel erzeugen

`ssh-keygen -t ed25519` — Erzeugt ein Ed25519-Schlüsselpaar (modern, empfohlen).

```bash
ssh-keygen -t ed25519 -C 'user@example.com'
```

`ssh-keygen -t rsa -b 4096` — Erzeugt ein RSA-Schlüsselpaar mit 4096 Bit.

```bash
ssh-keygen -t rsa -b 4096 -C 'user@example.com'
```

`ssh-keygen -t ed25519 -f <file>` — Erzeugt einen Schlüssel und speichert ihn unter einem eigenen Dateinamen.

```bash
ssh-keygen -t ed25519 -f ~/.ssh/deploy_key
```

`ssh-keygen -t ed25519 -N ''` — Erzeugt einen Schlüssel ohne Passphrase (für Automatisierung).

```bash
ssh-keygen -t ed25519 -N '' -f ~/.ssh/ci_key
```

`ssh-keygen -t ecdsa -b 521` — Erzeugt einen ECDSA-Schlüssel mit 521-Bit-Kurve.

```bash
ssh-keygen -t ecdsa -b 521
```

## Schlüsselinfo & Fingerabdrücke

`ssh-keygen -l -f <key>` — Zeigt den Fingerabdruck eines Schlüssels.

```bash
ssh-keygen -l -f ~/.ssh/id_ed25519.pub
```

`ssh-keygen -l -E md5 -f <key>` — Zeigt den Fingerabdruck im MD5-Format. — MD5 gilt als veraltet, nur für Legacy-Kompatibilität.

```bash
ssh-keygen -l -E md5 -f ~/.ssh/id_ed25519.pub
```

`ssh-keygen -lv -f <key>` — Zeigt den Fingerabdruck mit visuellem ASCII-Bild (Randomart).

```bash
ssh-keygen -lv -f ~/.ssh/id_ed25519.pub
```

`ssh-keygen -y -f <private-key>` — Extrahiert den öffentlichen Schlüssel aus einem privaten Schlüssel.

```bash
ssh-keygen -y -f ~/.ssh/id_ed25519 > ~/.ssh/id_ed25519.pub
```

## Passphrase verwalten

`ssh-keygen -p -f <key>` — Ändert die Passphrase eines privaten Schlüssels.

```bash
ssh-keygen -p -f ~/.ssh/id_ed25519
```

`ssh-keygen -p -f <key> -N '' -P '<old>'` — Entfernt die Passphrase eines Schlüssels. — Passphrase erscheint im Klartext in der Shell-History; nur in kontrollierten Umgebungen.

```bash
ssh-keygen -p -f ~/.ssh/id_ed25519 -N '' -P 'oldpassphrase'
```

## known_hosts verwalten

`ssh-keygen -R <host>` — Entfernt einen Host aus known_hosts (nach Schlüsselwechsel).

```bash
ssh-keygen -R server.example.com
```

`ssh-keygen -F <host>` — Sucht nach einem Host in known_hosts.

```bash
ssh-keygen -F github.com
```

`ssh-keygen -H -f ~/.ssh/known_hosts` — Hasht alle Hostnamen in known_hosts (für Datenschutz).

```bash
ssh-keygen -H -f ~/.ssh/known_hosts
```

`ssh-keyscan <host>` — Ruft den öffentlichen Schlüssel eines entfernten Hosts ab.

```bash
ssh-keyscan github.com >> ~/.ssh/known_hosts
```

`ssh-keyscan -t ed25519 <host>` — Ruft nur einen bestimmten Schlüsseltyp ab.

```bash
ssh-keyscan -t ed25519 github.com
```

## Format konvertieren

`ssh-keygen -e -f <key> -m RFC4716` — Exportiert den öffentlichen Schlüssel im RFC-4716-Format (SSH2).

```bash
ssh-keygen -e -f ~/.ssh/id_ed25519.pub -m RFC4716
```

`ssh-keygen -e -f <key> -m PEM` — Exportiert den öffentlichen Schlüssel im PEM-Format.

```bash
ssh-keygen -e -f ~/.ssh/id_rsa.pub -m PEM
```

`ssh-keygen -i -f <key> -m RFC4716` — Importiert einen Schlüssel aus dem RFC-4716-Format ins OpenSSH-Format.

```bash
ssh-keygen -i -f key.pub -m RFC4716
```

## Zertifikate & Signaturen

`ssh-keygen -s <ca-key> -I <id> -n <principals> <key>.pub` — Signiert einen Benutzer-Schlüssel mit einem CA-Schlüssel (SSH-Zertifikate).

```bash
ssh-keygen -s ca_key -I user_john -n john,admin john.pub
```

`ssh-keygen -s <ca-key> -I <id> -h <host-key>.pub` — Signiert einen Host-Schlüssel mit einem CA-Schlüssel.

```bash
ssh-keygen -s ca_key -I server.example.com -h ssh_host_ed25519_key.pub
```

`ssh-keygen -L -f <cert>` — Zeigt Details eines SSH-Zertifikats.

```bash
ssh-keygen -L -f john-cert.pub
```

`ssh-keygen -Y sign -f <key> -n <namespace> <file>` — Signiert eine Datei mit einem SSH-Schlüssel.

```bash
ssh-keygen -Y sign -f ~/.ssh/id_ed25519 -n file release.tar.gz
```

`ssh-keygen -Y verify -f <allowed-signers> -I <id> -n <namespace> -s <sig> < <file>` — Verifiziert eine Datei-Signatur.

```bash
ssh-keygen -Y verify -f allowed_signers -I user@example.com -n file -s release.tar.gz.sig < release.tar.gz
```

<!-- PROSE:outro -->
## Fazit

Mit `ssh-keygen` hast du alles, was du für sichere passwortlose Authentifizierung brauchst – von der Schlüsselerzeugung bis zur Zertifikatsvergabe. Greife im Alltag zu Ed25519: kompakt, schnell und kryptografisch zeitgemäß. Schütze private Schlüssel immer mit einer Passphrase und nutze einen SSH-Agenten, um sie nur einmal pro Session eingeben zu müssen.

## Weiterführende Links

- [OpenSSH – Wikipedia](https://de.wikipedia.org/wiki/OpenSSH) – Hintergrund und Geschichte
- [Secure Shell – Wikipedia](https://de.wikipedia.org/wiki/Secure_Shell) – Protokoll und Architektur
- [ssh-keygen(1) – Manpage](https://man.openbsd.org/ssh-keygen) – alle Optionen im Überblick (englisch)
<!-- PROSE:outro:end -->

## Verwandte Kommandos

- [ssh](https://www.jpkc.com/db/cheatsheets/networking/ssh/) – sichere Remote-Verbindungen aufbauen
- [scp](https://www.jpkc.com/db/cheatsheets/networking/scp/) – Dateien sicher zwischen Hosts übertragen
- [mosh](https://www.jpkc.com/db/cheatsheets/networking/mosh/) – robuste SSH-Verbindungen für mobile Nutzer

