Die Firma Cloudflare hat das Tool opkssh (OpenPubkey SSH) vorgestellt, das die Integration zentralisierter Authentifizierungsmittel in OpenSSH ermöglicht, um sich über OpenID Connect-Anbieter anzumelden. Mit opkssh kann die manuelle Arbeit bei der Verwaltung und Konfiguration von SSH-Schlüsseln entfallen sowie die Verbindung zu Servern von beliebigen Hosts ohne die Notwendigkeit, private Schlüssel auf jedem Client-Computer zu erstellen und ohne manuelles Kopieren öffentlicher Schlüssel auf den Server organisiert werden. Zum Herstellen der Verbindung genügt es, auf dem Server eine Verknüpfung mit dem Konto des OpenID-Anbieters herzustellen. Der Code des Tools ist in der Programmiersprache Go geschrieben und steht unter der Lizenz Apache 2.0 zur Verfügung.
Opkssh ist mit den OpenID-Anbietern 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 Verwendung von opkssh werden anstelle von zeitlich unbegrenzten SSH-Schlüsseln temporäre Schlüssel generiert, die nur wenige Stunden gültig sind und auf einer Bestätigung des OpenID-Anbieters basieren. Ein Leak solcher Schlüssel nach Ablauf ihrer Gültigkeit stellt keine Sicherheitsbedrohung dar. Standardmäßig beträgt die Gültigkeitsdauer eines Schlüssels 24 Stunden, danach ist eine erneute Identifizierung über OpenID erforderlich.
Die Integration mit OpenSSH basiert auf der Möglichkeit, Erweiterungen des SSH-Protokolls zu erstellen, die das Anheften beliebiger Daten an SSH-Zertifikate erlauben. Nach erfolgreicher Authentifizierung über OpenID generiert 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 mit zusätzlichen Daten im SSH-Zertifikat integriert. Die Erstellung und Überprüfung von PK-Tokens auf der Serverseite erfolgt unter Verwendung des kryptografischen Protokolls OpenPubKey.
OpenPubKey ermöglicht die Generierung eines öffentlichen Schlüssels und dessen Bindung an ein von einem OpenID-Anbieter ausgegebenes Token. Durch die digitale Signatur bestätigt der Anbieter, dass dieser Schlüssel von dem angegebenen authentifizierten Benutzer erstellt wurde. Zum Beispiel kann der OpenID-Anbieter Google bestätigen, 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 mit dem angegebenen öffentlichen Schlüssel übereinstimmt, 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 über 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 Konfiguration der Bindung von Konten an OpenID wird auf der SSH-Serverseite vorgenommen. Auf der SSH-Clientseite sind keine Änderungen der Einstellungen erforderlich, jedoch muss vor dem Login der Befehl „opkssh login“ ausgeführt werden, und im erscheinenden Browserfenster muss der OpenID-Anbieter ausgewählt werden, um sich über diesen zu authentifizieren.
Das Dienstprogramm opkssh generiert SSH-Schlüssel und erhält ein PK-Token, das bestätigt, dass der Benutzer authentifiziert wurde, und ermöglicht die Überprüfung, dass die erstellten Schlüssel dem angegebenen Benutzer gehören. Der öffentliche SSH-Schlüssel, der über das Feld für zusätzliche Daten mit dem PK-Token verknüpft ist, wird in die Datei ~/ .ssh/id_ecdsas geschrieben und beginnt beim Verbinden mit dem zu einem Server Dienstprogramm ssh.
Die Verbindung zum Server erfolgt mit dem üblichen SSH-Schema „ssh login@server“, wobei zuvor Server das Login mit dem Konto in OpenID, das der Benutzer verwendet, identifiziert werden muss. So läuft die Arbeit darauf hinaus, dass der SSH-Client den öffentlichen Schlüssel an den SSH-Server sendet, und der Server das Kommando „opkssh verify“ zur Überprüfung des Schlüssels ausführt.
Um ein Konto an OpenID zu binden, führt der Serveradministrator den Befehl „opkssh add“ aus. Zum Beispiel, um den Zugriff auf den Server unter dem Benutzer „root“ mit OpenID-Authentifizierung über das Konto test@gmail.com in Gmail zu erlauben, muss „sudo opkssh add root test@gmail.com google“ ausgeführt werden, wonach der Client sich mit den Parametern dieses Kontos über den Befehl „ssh root@host_server“ verbinden kann.
Die Bindung des Benutzerkontos 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. Darüber hinaus kann in der Datei /etc/opk/providers eine Liste zulässiger OpenID-Provider, deren Parameter und eine Liste autorisierter Client-IDs definiert werden.

Quelle: opennet.ru
