# SSH-Keys erzeugen und verwalten

## SSH-Key erzeugen

<p class="callout info">Shortcut: `ssh-keygen -t ed25519 -a 100 -C 'email@mydomain.de'`</p>

Es wird ein Passphrase abgefragt. Soll das Keyfile unverschlüsselt gespeichert werden, kann die Eingabe eines Passworts mit Enter übersprungen werden. Dies ist allerdings nicht empfehlenswert, denn falls der Key in die falschen Hände gelangt, wären alle Server mit dem Pubkey in den authorized\_keys ohne weitere Passwortabfrage offen.

```
ssh-keygen -t [ (dsa) | (ecdsa) | ed25519 | rsa | (rsa1) ] -b 4096 -a 100 -C '<kommentar>'

# als copy&paste Beispiel mit ed25519 (hat eine fixe Bitgröße von 256 bit,
# sie muss deshalb nicht angegeben werden):
ssh-keygen -t ed25519 -a 100 -C 'email@mydomain.de'
```

Dies erzeugt zwei Dateien in `~/.ssh/id_<key_type>*` je nach verwendetem Verfahren. Beispiel <abbr title="Rivest Shamir Adleman">RSA</abbr>: in der Datei `id_rsa` steht der (verschlüsselte) private Key. In der Datei `id_rsa.pub` steht der öffentliche Teil des Schlüssels, der verteilt werden darf/muss.

Der Typ [ed25519](https://en.wikipedia.org/wiki/EdDSA "https://en.wikipedia.org/wiki/EdDSA") ist zum heutigen Stand (05.03.2021) die beste Wahl. Allerdings wird er noch [nicht überall unterstützt](https://ianix.com/pub/ed25519-deployment.html "https://ianix.com/pub/ed25519-deployment.html"). In diesem Fall empfiehlt es sich (zusätzlich) einen <abbr title="Rivest Shamir Adleman">RSA</abbr>-Key mit 4096 <abbr title="binary digit">bit</abbr> zu erstellen.

ecdsa sollte nicht verwendet werden, da möglicherweise eine Hintertür für die [US-Regierung](http://www.spiegel.de/international/germany/inside-the-nsa-s-war-on-internet-security-a-1010361.html "http://www.spiegel.de/international/germany/inside-the-nsa-s-war-on-internet-security-a-1010361.html") eingebaut ist. RSA1 und [DSA](https://stackoverflow.com/questions/2821736/whats-the-difference-between-id-rsa-pub-and-id-dsa-pub/27855045#27855045 "https://stackoverflow.com/questions/2821736/whats-the-difference-between-id-rsa-pub-and-id-dsa-pub/27855045#27855045") sollten auch nicht mehr verwendet werden.

Unter Windows gibts mit `puttygen.exe` ein grafisches Pendant dazu. Hier lassen sich die erzeugten Keys auch ins Unix-Format konvertieren.

## Passphrase des <span class="search_hit">SSH</span>-Keys nachträglich ändern

<div id="bkmrk-ssh-keygen--p--f-%7E%2F.">```
<span class="search_hit">ssh</span>-<span class="search_hit">keygen</span> -p -f ~/.<span class="search_hit">ssh</span>/id_rsa
```

</div>## <span class="search_hit">SSH</span>-Key in den <span class="search_hit">SSH</span>-Agenten laden

Der <abbr title="Secure Shell"><span class="search_hit">SSH</span></abbr>-Agent muss gestartet sein, bei Fedora Core passiert dies automatisch beim Starten der X-Oberfläche.

<div id="bkmrk-ssh-add"><div>```
<span class="search_hit">ssh</span>-add
```

</div></div>Dies lädt defaultmäßig alle id\_\*-Files in ~/.<span class="search_hit">ssh</span> in den Agent. Der Agent dient der Bequemlichkeit, d.h. man lädt einmal seinen Key und von nun an kümmert sich der Agent um alle anfragenden Programme, wie z.B. <span class="search_hit">ssh</span> oder scp. Für Windows gibts im Putty-Paket ein Programm namens `pagent.exe`, welches den gleichen Zweck erfüllt.

[Hier](https://wiki.magenbrot.net/linux/kryptographie/ssh/mit_der_ssh-passphrase_an_kde_oder_gnome_anmelden "linux:kryptographie:ssh:mit_der_ssh-passphrase_an_kde_oder_gnome_anmelden") ist eine Anleitung, wie man seinen <span class="search_hit">ssh</span>-Key für die Anmeldung an <abbr title="K Desktop Environment">KDE</abbr>/Gnome verwenden und ihn gleich in den Agent laden kann.

## <span class="search_hit">SSH</span>-Pubkey verteilen

Um nun den <abbr title="Secure Shell"><span class="search_hit">SSH</span></abbr>-Key für die Authentifizierung an anderen Servern verwenden zu können muss er noch dort abgelegt werden. Dazu bringt openssh ein schönes Tool mit:

<div id="bkmrk-ssh-copy-id-%5Buser%40%5Dm"><div>```
<span class="search_hit">ssh</span>-copy-id [user@]machine
```

</div></div>Dies erzeugt auf dem Zielserver ggf. das Verzeichnis ~/.<span class="search_hit">ssh</span>, legt dort den öffentlichen Teil des Schlüssels in der Datei ~/.<span class="search_hit">ssh</span>/authorized\_keys ab und vergibt gleich passende Berechtigungen.

## Fingerprint des <span class="search_hit">SSH</span>-Keys anzeigen

Mit dem Fingerprint läßt sich der Key schnell von anderen verifizieren (könnte z.B. telefonisch abgeglichen werden).<a id="bkmrk--0" name="discussion__section"></a>

```
# Fingerprint als SHA256 ausgeben (Default bei Debian 8.8)
ssh-keygen -l -f ~/.ssh/id_rsa.pub

# Fingerprint als MD5 ausgeben
ssh-keygen -l -E md5 -f ~/.ssh/id_rsa.pub
```