Authentifizierung über ssh mit einem Yubikey

Als stolzer Besitzer eines Yubikey Neo mit vollständig eingerichteten gpg-Schlüsseln für die Email-Verschlüsselung und -signierung wollte ich den Key auch noch für die Authentifizierung von meinen root-Accounts nutzen. Bisher hatte ich den root-Login verboten und mich immer über su – zu root gemacht wenn ich es brauchte. Leider taugt dieses Verfahren bereits bei scp nicht mehr. Im Internet findet man dazu einen Haufen teils recht komplizierte Anleitungen – kryptographische Verfahren haben leider die Neigung selber recht kryptisch zu werden. Ich suchte jedoch nach einem einfachen und wenig fehlerträchtigen Weg damit die Chance des eigenen Aussperrens recht minimal bleibt. Nun gibt es die Public-Key-Authentifizierung und dazu muss man den private Key immer parat haben – im lokalen Verzeichnis ~/.ssh/ oder auf einem USB-Stick. Wenn man jedoch sowieso einen Yubikey besitzt dann bietet sich dieser jedoch an um diese Aufgabe auch noch zu übernehmen.

Der einfachste und für meinen Geschmack am wenigsten fehleranfälligen Weg den ich gefunden habe ist folgender – immer einen vollständig eingerichteten Yubikey voraus gesetzt.

Vorbereiten des GNU/Linux-Clients

Zunächst muss, wenn noch nicht bereits installiert, mit apt-get install gpg-agent den gpg-agent installieren und unter ~/.gnupg/gpg-agent.conf eine Datei mit dem folgenden Inhalt angelegt:

default-cache-ttl 18000
max-cache-ttl 86400
ignore-cache-for-signing
enable-ssh-support

Bei eingesteckten Yubikey sollte gpg –card-status die richtigen Schlüssel die auf der Karte vorhanden sind anzeigen.

Die ~/.bashrc wird nun durch folgende Zeilen ergänzen:

unset SSH_AGENT_PID
if [ "${gnupg_SSH_AUTH_SOCK_by:-0}" -ne $$ ]; then
export SSH_AUTH_SOCK="$(gpgconf --list-dirs agent-ssh-socket)"
fi

und das Terminalfenster schließen und neu anmelden damit die .bashrc neu eingelesen wird. Alternativ kann man im Fenster eine neue Shell mit der Eingabe von bash starten.

Der gpg-agent wird mit gpgconf –kill gpg-agent beendet und sowieso bei Bedarf selbstständig neu gestartet.

Vorbereitung des Servers

Nun muss dem Server der Schlüssel mitgeteilt werden und dazu muss scp für den Benutzer root funktionieren da die Anmeldung per Yubikey für diesen Benutzer gelten soll. Dazu wird die Zeile PermitRootLogin no in /etc/ssh/sshd_config nach PermitRootLogin yes geändert und der Dienst mit service ssh restart neu gestartet. Der öffentliche Teil des Schlüssels wird nun mit:

gpg --export-ssh-key max.mustermann@example.com | ssh root@10.0.0.1 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

übertragen. Wenn man nun auf dem Server in der Datei /root/.ssh/authorized_keys nachschaut muss dort der gleiche Schlüssel stehen wie die Ausgabe von

gpg --export-ssh-key max.mustermann@example.com

ergibt. Wenn man sich jetzt mit ssh root@10.0.0.1 auf den Server verbindet sollte ein Fenster aufgehen in dem man zur Eingabe des Benutzer-Schlüssels des Keys auf dem Yubikey aufgefordert wird und bei korrekter Eingabe sich dann in der root-Shell des Servers befinden.

Als Nacharbeiten können wir die Passwort-Eingabe von root deaktivieren und dies erfolgt mit dem Ändern der Zeile PermitRootLogin yes in PermitRootLogin without-password und Neustart von ssh. Die Zeile sieht recht gefährlich aus aber bedeutet, dass sich root nur noch mit Schlüssel anmelden kann und nicht das keine Authentifizierung statt findet.

1 Gedanke zu „Authentifizierung über ssh mit einem Yubikey“

Kommentare sind geschlossen.

kais-universum.de