Die Firma Cloudflare hat das Tool opkssh (OpenPubkey SSH) vorgestellt, mit dem zentrale Authentifizierungsmethoden in OpenSSH integriert werden können, um sich über OpenID Connect-Anbieter anzumelden. Mit opkssh lässt sich der manuelle Aufwand zur Verwaltung und Einrichtung von SSH-Schlüsseln reduzieren und eine Verbindung zu Servern von beliebigen Hosts aus ermöglichen, ohne dass auf jedem Client-Computer private Schlüssel erstellt oder öffentliche Schlüssel manuell auf den Server übertragen werden müssen. Um sich zu verbinden, reicht es aus, auf dem Server eine Verknüpfung mit dem Konto des OpenID-Anbieters herzustellen. Der Code des Tools ist in der Programmiersprache Go geschrieben und wird unter der Lizenz Apache 2.0 veröffentlicht.
Opkssh ist mit OpenID-Anbietern wie Google, Microsoft/Azure und Gitlab kompatibel, was die Anmeldung über bestehende Konten in den Diensten gmail.com, microsoft.com und gitlab.com ermöglicht. Bei der Verwendung von opkssh werden anstelle unbefristeter SSH-Schlüssel temporäre Schlüssel generiert, die nur einige Stunden gültig sind und auf der Bestätigung des OpenID-Anbieters basieren. Das Leck solcher Schlüssel nach Ablauf ihrer Gültigkeit stellt keine Sicherheitsbedrohung dar. Standardmäßig beträgt die Gültigkeitsdauer eines Schlüssels 24 Stunden, nach denen eine erneute Identifizierung über OpenID erforderlich ist.
Die Integration mit OpenSSH basiert auf der Möglichkeit, SSH-Protokollerweiterungen zu erstellen, die das Anhängen beliebiger Daten an SSH-Zertifikate ermöglichen. Nach der Authentifizierung über OpenID erstellt der Client einen öffentlichen Schlüssel, der ein PK-Token enthält, das die Zugehörigkeit des Schlüssels zum angegebenen Benutzer bestätigt. Das Token wird in das SSH-Protokoll über ein Feld für zusätzliche Daten im SSH-Zertifikat integriert. Die Erstellung und Überprüfung der PK-Tokens auf Serverseite erfolgt unter Verwendung des kryptografischen Protokolls OpenPubKey.
OpenPubKey ermöglicht die Generierung eines öffentlichen Schlüssels und dessen Verknüpfung mit einem Token, das von einem OpenID-Anbieter ausgegeben wird. Durch die digitale Signatur bestätigt der Anbieter, dass dieser Schlüssel vom angegebenen authentifizierten Benutzer erstellt wurde. Ein Beispiel wäre der OpenID-Anbieter Google, der bestätigen kann, dass der Benutzer als test@gmail.com authentifiziert ist. Auf der Serverseite wird überprüft, ob das angehängte Token vom OpenID-Anbieter signiert wurde und ob die digitale Signatur dem angegebenen öffentlichen Schlüssel entspricht, d.h. der Server kann sicherstellen, dass tatsächlich der Benutzer test@gmail.com den öffentlichen Schlüssel für den verbundenen SSH-Client erstellt hat.

Die Integration mit OpenSSH erfolgt durch die Angabe des Programms opkssh in der Konfigurationsdatei „sshd_config“ über die Direktive „AuthorizedKeysCommand“ (z.B.: „AuthorizedKeysCommand /usr/local/bin/opkssh verify %u %k %t“). Die Einstellung zur Verknüpfung der Konten mit OpenID erfolgt auf der SSH-Serverseite. Auf der SSH-Clientseite sind keine Änderungen der Einstellungen erforderlich, jedoch muss vor der Anmeldung der Befehl „opkssh login“ ausgeführt werden, um im angezeigten Browserfenster den OpenID-Anbieter auszuwählen und die Authentifizierung darüber durchzuführen.
Das Tool opkssh generiert SSH-Schlüssel und erhält ein PK-Token, das bestätigt, dass der Benutzer authentifiziert wurde und das es ermöglicht zu überprüfen, dass die generierten Schlüssel dem angegebenen Benutzer gehören. Der öffentliche SSH-Schlüssel, an dem das PK-Token über das Feld für zusätzliche Daten angehängt ist, wird in die Datei ~/.ssh/id_ecdsas geschrieben und beginnt bei der Verbindung mit Server der ssh-Utility.
Die Verbindung zum Server erfolgt mit dem üblichen SSH-Schema „ssh login@server“, wobei Server der Login zuvor mit dem OpenID-Konto, das der Benutzer verwendet, verifiziert werden muss. So sendet der SSH-Client den öffentlichen Schlüssel an den SSH-Server, und der Server führt den Befehl „opkssh verify“ zur Überprüfung des Schlüssels aus.
Um das Konto mit OpenID zu verknüpfen, führt der Serveradministrator den Befehl „opkssh add“ aus. Beispielsweise, um den Zugriff auf den Server als Benutzer „root“ mit OpenID-Authentifizierung über das Konto test@gmail.com von Gmail zu erlauben, sollte der Befehl „sudo opkssh add root test@gmail.com google“ ausgeführt werden, sodass der Client sich mit den Parametern dieses Kontos mit dem Befehl „ssh root@host_server“ verbinden kann.
Die Verknüpfung des Kontos kann auch manuell über die Konfigurationsdatei /etc/opk/auth_id (oder ~/.opk/auth_id) erfolgen, in die für das obige Beispiel die Zeile „root test@gmail.com https://accounts.google.com“ geschrieben wird. Zudem kann über die Datei /etc/opk/providers eine Liste der zulässigen OpenID-Anbieter, deren Parameter und eine Liste der erlaubten Client-IDs definiert werden.

Quelle: opennet.ru
