Security

SSH Login mit Nitrokey Pro 2 unter Linux

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.

Voraussetzungen

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/plasma/startup/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/plasma/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.

Leave a Reply

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.