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.
Die Einrichtung habe ich auf einem Desktop / Server mit Gentoo Linux gemacht. Prinzipiell sollte das Ganze aber mit jeglicher Distribution funktionieren.
Voraussetzungen
- Nitrokey Pro 2 einrichten
- OpenPGP Schlüssel 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
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
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. Damit sollte nun eine einloggen auf einen SSH Server mit dem Nitrokey Pro 2 möglich sein.