In diesem Tutorial beschreibe ich euch, wie Ihr einen SSH Login mit dem Nitrokey Pro 2 hinbekommt. Voraussetzung ist, dass Ihr bereits OpenPGP Schlüssel auf dem Nitrokey Pro 2 erzeugt habt. Eine Anleitung hierfür findet Ihr hier.
Die Einrichtung habe ich auf einem Desktop / Server mit Gentoo Linux gemacht. Prinzipiell sollte das Ganze aber mit jeglicher Distribution funktionieren. Den Gentoo spezifischen Kram werden ich entsprechend markieren.
Dieses Anleitung findest du auch in einer aktualisierten Fassung auf meinem neuen Blog.
Voraussetzungen
- Nitrokey Pro 2 eingerichtet
- OpenPGP Schlüssen auf dem Nitrokey Pro 2
- GnuPG in Version >= 2.2.15
Einrichtung OpenPGP Schlüssel als SSH Key
Sind auf dem Nitrokey Pro 2 die OpenPGP Schlüssel eingerichtet muss man in der Konsole (Benutzer / Client) den Schlüssel zu SSH hinzufügen. Die geschieht mit dem Kommando:
ssh-add
Mit dem folgenden Befehl könnt ihr kontrollieren, ob der Schlüssel benutzt wird:
ssh-add -l
Der Output sollte dann in etwa so aussehen:
2048 SHA256:1Ttk8NzJ4BTr9xUqCI2y91ZFUQfUGvWuDpkPMn/JN9k cardno:000500001234 (RSA)
Diesen Schlüssel müssen wir nun in die „authorized_keys“ Datei auf dem SSH Server platzieren. Das geht am einfachsten mit:
ssh-copy-id username@server
„Username“ und „server“ müsst Ihr natürlich mit euren Daten ersetzen! Danach sollte der Key auf dem Server in der Datei vorhanden sein.
GPG Agent einrichten
Damit der ganze Zauber funktioniert müssen wir nun noch in der Datei „~/.gnupg/gpg.conf“ folgendes einfügen:
use-agent
Wenn die Datei nicht vorhanden ist, erzeugt diese einfach. Als nächstes müssen wir die Datei „~/.gnupg/gpg-agent.conf“ editieren. Fügt Folgendes hinzu:
enable-ssh-support
In der Datei ~/.bashrc fügen wir Folgendes hinzu:
unset SSH_AGENT_PID if [ "${gnupg_SSH_AUTH_SOCK_by:-0}" -ne $$ ]; then export SSH_AUTH_SOCK="$(gpgconf --list-dirs agent-ssh-socket)" fi
Nun startet am besten euren Rechner neu durch, damit alle Einstellungen übernommen werden. Sobald das geschehen ist, könnt Ihr versuchen auch auf dem SSH Server einzuloggen.
Sollte beim Einloggen dennoch ein Passwort abgefragt werden (nicht PIN), läuft vermutlich der GPG Agent nicht, das war zumindest bei mir der Fall. Ihr könnt ihn mit diesem Befehl starten:
gpg-connect-agent updatestartuptty /bye
Damit ist der unvierselle Teil des Tutorials vorbei. Im Anschluss erkläre ich noch, wie ich das ganze unter Gentoo optimiert habe.
Pinentry für SSH Login einrichten
Um GnuPG mit Pinentry zu benutzen muss man Folgendes in die Datei „~/.gnupg/gpg-agent.conf“ hinzufügen:
pinentry-program /usr/bin/pinentry no-grab default-cache-ttl 1800
Pinentry sorgt für die PIN Abfrage und kann in verschieden Modi betrieben werden (GUI / Konsole). Die verfügbaren Modi bekommt man mit dem Befehl (als „root“):
eselect pinentry list
Standardmäßig sollte „pinentry-curses“ ausgewählt sein. Mit dem folgenden Befehl könnt ihr das ändern z.B.:
eselect pinentry set pinentry-qt
Zu guter Letzt fügen wir noch folgende Zeilen in die Datei „~/.bashrc“ des Benutzers:
export GPG_TTY=$(tty) if [[ -n "$SSH_CONNECTION" ]] ;then export PINENTRY_USER_DATA="USE_CURSES=1" fi
Auch hier ist ein Rechnerneustart ratsam. Alternativ einmal kurz in der Konsole aus- und einloggen sollte auch funktionieren. Nun sollte die entsprechende Abfrage bei einer PIN Eingabe kommen.
GPG Agent Start mit KDE 5 automatisieren
Wie bereit erwähnt startet der GPG Agent nicht automatisch beim Systemstart. Der Agent muss auch für jeden spezifischen Nutzer mit entsprechenden Rechten gestartet werden.
In meinem Fall benutze ich KDE 5. Um den Agent automatisiert zu starten editieren wir die Datei „/etc/xdg/plasma-workspace/env/10-agent-startup.sh
„. Die Datei sollte danach in etwa so aussehen:
GPG_AGENT=true SSH_AGENT=true SSH_AGENT=gpg # use gpg-agent for ssh instead of ssh-agent if [ "${GPG_AGENT}" = true ]; then if [ -x /usr/bin/gpgconf ]; then gpgconf --launch gpg-agent >/dev/null 2>&1 if [ $? = 2 ]; then eval "$(/usr/bin/gpg-agent --enable-ssh-support --daemon)" fi fi fi if [ "${SSH_AGENT}" = true ]; then if [ -x /usr/bin/ssh-agent ]; then eval "$(/usr/bin/ssh-agent -s)" fi elif [ "${SSH_AGENT}" = gpg ] && [ "${GPG_AGENT}" = true ]; then if [ -e /run/user/$(id -ru)/gnupg/S.gpg-agent.ssh ]; then export SSH_AUTH_SOCK=/run/user/$(id -ru)/gnupg/S.gpg-agent.ssh elif [ -e "${HOME}/.gnupg/S.gpg-agent.ssh" ]; then export SSH_AUTH_SOCK=${HOME}/.gnupg/S.gpg-agent.ssh fi fi
Zum automatisierten Beenden editieren wir die Datei „/etc/xdg/plasma-workspace/shutdown/10-agent-shutdown.sh
„
# gnupg 2.0.x #if [ -n "${GPG_AGENT_INFO}" ]; then # kill $(echo ${GPG_AGENT_INFO} | cut -d':' -f 2) >/dev/null 2>&1 #fi # gnupg 2.1.x gpgconf --kill gpg-agent >/dev/null 2>&1 if [ -n "${SSH_AGENT_PID}" ]; then eval "$(ssh-agent -s -k)" fi
Nun sollte der Agent nach einem Neustart des Systems automatisch starten.
Abschluss
Damit sollte nun eine einloggen auf einen SSH Server mit dem Nitrokey Pro 2 möglich sein.
Hiermit ist dieses Tutorial abgeschlossen. Ich hoffe es war hilfreich für euch! Wenn Ihr mich unterstützen wollt, könnt ihr das sehr gerne hier tun.