Fedora 27: ED25519 OpenSSH Keys nach Benutzung entsperrt lassen


Leider kommt der Gnome Keyring nach wie vor nicht mit ED25519-SSH-Schüsseln zurecht. Das heißt: Standardmäßig muss bei jeder Verwendung eines SSH-Keys das dazugehörige Passwort erneut eingegeben werden. Mit dem Tool “Keychain” kann der Prozess vereinfacht werden: Auf meinem Fedora-Rechner ist die Eingabe des Passworts für einen Schlüssel von nun an nur noch bei der ersten Verwendung notwendig.

Installation des “Keychain” Tools:

sudo dnf install keychain

Wird Keychain gestartet, sucht es nach einer bereits laufenden ssh-agent-Instanz, welche SSH-Keys in einem entsperrten Zustand zwischenspeichern kann. Existiert eine solche Instanz, verknüpft es die laufende Shell-Instanz mit diesem Agent. Läuft kein solcher Agent-Prozess, wird einer gestartet. Damit nicht bei jedem Start eines Shell-Fensters (z.B. Gnome Terminal) das Startkommando für Keychain manuell eingegeben werden muss, kann in der ~/.bashrc Datei ein Autostart-Eintrag angelegt werden:

eval $(keychain --eval -Q --quiet)

Da ich nicht die Bash verwende, sondern die Zsh-Shell, habe ich stattdessen folgende Zeile zu meiner Zsh-Konfiguration ~/.zshrc hinzugefügt:

### Start Keychain
eval `keychain -q --eval --quiet`

In der SSH-Konfiguration unter ~/.ssh/config habe ich eine weitere Zeile hinzugefügt:

AddKeysToAgent yes

Diese Zeile konfiguriert SSH so, dass einmal verwendete Schlüssel an den SSH-Agent übermittelt werden, sodass sie dort zwischengespeichert werden können.

Übrigens: Üblicherweise werden dem Keychain-Kommando schon beim Start die zu entsperrenden Keys mitgegeben:

eval $(keychain --eval -Q --quiet ~/.ssh/id_ed25519)

In diesem Fall ist die Konfiguration von SSH (zur Übermittlung des Keys) nicht notwendig. Allerdings hat diese Variante den unangenehmen Nebeneffekt, dass man beim Öffnen eines Terminal-Fensters sofort mit der Entsperrung eines Keys belästigt wird - auch, wenn man erst einmal gar nicht vor hat, einen der hinterlegten Keys zu nutzen. Daher übergebe ich Keychain zunächst keine Schlüssel. Keychain hat dann nur die Aufgabe, einen zentralen SSH-Agent mit allen Shell-Instanzen zu verknüpfen. Das Hinzufügen von Keys zum Agent geschieht bei mir über die zusätzliche SSH-Konfiguration.

Um die neuen Einstellungen zu übernehmen, müssen alle Terminal-Fenster bzw. Shell-Instanzen geschlossen und neu geöffnet werden. Beim Start sollte Keychain sichergestellt haben, dass ein SSH Agent läuft und mit der jeweiligen Shell verknüpft ist. Wird nun beispielsweise eine SSH-Anmeldung an einem fremden Rechner durchgeführt, wird nach dem Passwort für den Schlüssel gefragt. Nach Beendigung der Session und einem weiteren SSH-Befehl muss das Passwort nicht mehr eingegeben werden. Das gilt auch für alle weiteren, geöffneten Shell-Instanzen.

Wer das Setup etwas sicherer gestalten möchte, kann Keychain anweisen, den ssh-agent-Prozess mit einer Timeout-Flag zu starten. Zwischengespeicherte Keys werden dann nur für einen beschränkten Zeitraum im Speicher belassen (timeout in Minuten):

eval $(keychain --eval -Q --quiet --timeout 30)

Nach Ablauf des Timeouts ist eine erneute Passworteingabe erforderlich. Eine manuelle Sperrung aller Keys kann bei Bedarf mit folgendem Kommandos durchgeführt werden:

keychain --clear

Das hier vorgestellte Setup ermöglicht mir einen ähnlich bequemen Umgang, wie er mir mit meinen RSA-Schlüsseln über den Gnome-Schlüsselmanager möglich war. Die Verwendung von technisch überlegenen ED25519-Schlüsseln bedeutet nun keine Beeinträchtigung meines Workflows mehr. Das ständige Eintippen von langen, komplexen Passwörtern hat damit ein Ende.