Android: Sicherer Zugriff auf SSH-Server per Public-Key-Authentifizierung via Termux, OpenKeyChain & YubiKey
Aktuell stand ich vor der Frage, wie ich mich mit meinem Android-Smartphone per SSH mit meinem SSH-Server verbinden kann. Die Anmeldung sollte dabei per Public-Key-Authentifizierung möglich sein. Zudem wollte ich meinen GPG-Authentifizierungs-Unterschlüssel, der sich auf meinem YubiKey befindet, als SSH-Schlüssel/Key verwenden.
In diesem Beitrag beschreibe ich euch, wie ich das Ganze mit den Open-Source-Apps Termux, OkcAgent und OpenKeychain umgesetzt bekommen habe.
Voraussetzungen
Ich gehe in diesem Beitrag nicht auf jedes Detail ein, weshalb folgende Punkte als vorausgesetzt angesehen werden:
- SSH-Server - installiert & eingerichtet
- über das Netzwerk durch euer Android-Smarthone erreichbar
- Public-Key-Authentifizierung aktiviert
- öffentlicher SSH-Schlüssel (Public-SSH-Key) in der Datei
authorized_keys
hinterlegt - befindet sich im Verzeichnis/home/user/.ssh
des Benutzers mit dem ihr euch anmelden wollt
- YubiKey mit NFC-Funktion und eingerichteten GPG-Schlüsseln
- Android-Smartphone
- die o.g. Apps Termux, OkcAgent und OpenKeychain sind installiert
- OpenKeychain ist bereits mit eurem YubiKey eingerichtet
Android - Termux & OkcAgent einrichten
Bei Termux handelt es sich um einen Terminal-Emulator. Termux verfügt wie andere Linux-Distributionen über ein eigenes Paket-Repository. Die Pakete werden durch die Termux-Entwickler gebaut und signiert (Details siehe Termux-Wiki: Package Management).
Standardmäßig ist unter Termux kein SSH-Client installiert. Außerdem verfügt Termux derzeit über keine OpenKeychain-Integration. Hierfür gibt es glücklicherweise OkcAgent, welches als Schnittstelle zwischen Termux und OpenKeychain dient. OkcAgent besteht dabei aus einem eigenständigen Termux-Paket sowie einer separaten Android-App. Das OkcAgent-Paket dient als SSH-Agent und Schnittstelle zwischen Termux und der OkcAgent-App. Die OkcAgent-App wiederum sorgt für die Verbindung zur OpenKeychain-App.
Termux - SSH- und OkcAgent-Paket installieren und einrichten
Startet Termux und stellt zuallererst sicher, dass alle Pakete aktuell sind:
pkg upgrade
Nun installieren wir das SSH-Paket (Client als auch Server - für diesen Beitrag brauchen wir aber nur die Client-Funktionalität) und das OkcAgent-Paket:
pkg install openssh
pkg install okc-agents
Um dem System mitzuteilen, dass OkcAgent als SSH-Agent verwendet werden soll, bedarf es ein paar Zeilen Code (siehe OkcAgent: How to use). Diesen könnt ihr z.B. in die .profile
-Datei eures Termux-Homeverzeichnis einfügen. Bei jedem Start von Termux wird so auch automatisch OkcAgent gestartet. Ich selbst habe den Code in eine Datei namens initSshAgent
eingefügt und führe die Datei bei Bedarf aus:
if ! pgrep okc-ssh-agent > /dev/null; then
okc-ssh-agent > "$PREFIX/tmp/okc-ssh-agent.env"
fi
source "$PREFIX/tmp/okc-ssh-agent.env"
Damit ist die Einrichtung von Termux soweit fertig.
OkcAgent einrichten
Jetzt muss die OkcAgent-App eingerichtet werden. In der OkcAgent-App müssen wir unseren in OpenKeychain hinterlegen SSH-Key auswählen. Wie bereits erwähnt, gehe ich auf die Einrichtung von OpenKeychain nicht weiter ein und gehe davon aus, dass ihr euren YubiKey bereits mit OpenKeychain eingerichtet habt. Bei mir sieht das z.B. wie folgt aus:

Startet nun also die OkcAgent-App. In der App klickt ihr nun auf Add SSH Key
:

Wählt den SSH-Key aus, der später in Termux verwendet werden soll:

Der ausgewählte Key sollte dann in der OkcAgent-App entsprechend angezeigt werden:

Die Einrichtung ist nun soweit abgeschlossen.
SSH-Verbindung zw. Android und SSH-Server herstellen
Als erstes muss der OkcAgent und somit SSH-Agent in Termux gestartet werden. Wenn ihr, wie o.a. die Datei initSshAgent
angelegt habt, dann führt diese nun wie folgt aus:
source initSshAgent
Agent pid 20916
Erhaltet ihr keinen Fehler und eine Ausgabe, wie oben aufgeführt, dann sollte der SSH-Agent erfolgreich gestartet sein. Zur Sicherheit könnt ihr auch folgenden Befehl ausführen, der euch nun euren öffentlichen SSH-Key anzeigen sollte:
ssh-add -L
ssh-rsa AAAAAB3[...] Stephan (codingblatt.de) [...]
Zuguterletzt stellt nun die SSH-Verbindung mit dem üblichen SSH-Client-Befehl her:
ssh user@mein-ssh-server
Ihr solltet nun die bekannte Aufforderung von OpenKeychain erhalten, die PIN eures YubiKeys einzugeben. Nach Eingabe der PIN, werdet ihr dann gebeten den YubiKey an euer Smartphone zu halten.

Im Erfolgsfall solltet ihr nun auf eurem SSH-Server angemeldet sein.
Fazit
Dank dem Zusammenspiel mehrerer Open-Source-Apps kann ich unter Android auf meinen SSH-Server per Public-Key-Authentifizierung zugreifen. Zudem muss ich meinen dafür verwendeten privaten SSH-Schlüssel (streng genommen ist es mein GPG-Authentifizierungs-Unterschlüssel) nicht auf meinem Android-Smartphone speichern, sondern kann meinen YubiKey dafür verwenden.
Ihr könnt Termux auch Zugriff auf eure Dateien geben. Ihr könntet dann z.B. per rsync eure Dateien als Backup auf euren SSH-Server übertragen.