La société Cloudflare a présenté l'outil opkssh (OpenPubkey SSH), permettant d'intégrer des moyens d'authentification centralisée dans OpenSSH, avec la possibilité de se connecter via des fournisseurs OpenID Connect. Grâce à opkssh, il est possible d'éliminer le travail manuel lié à la gestion et à la configuration des clés SSH, tout en permettant une connexion au serveur depuis n'importe quel hôte, sans avoir à créer des clés privées sur chaque ordinateur client et sans devoir copier manuellement les clés publiques sur le serveur. Il suffit de lier le compte à un fournisseur OpenID sur le serveur pour établir la connexion. Le code de l'outil est écrit en Go et est distribué sous la licence Apache 2.0.
Opkssh est compatible avec les fournisseurs OpenID tels que Google, Microsoft/Azure et Gitlab, ce qui permet de configurer l'accès via des comptes existants sur les services gmail.com, microsoft.com et gitlab.com. Lors de l'utilisation d'opkssh, plutôt que des clés SSH illimitées dans le temps, des clés temporaires sont générées, valables pendant quelques heures et formées sur la base d'une confirmation du fournisseur OpenID. La fuite de telles clés après leur expiration ne pose pas de risque de sécurité. Par défaut, la durée de vie d'une clé est de 24 heures, après quoi il est nécessaire de se réidentifier via OpenID.
L'intégration avec OpenSSH repose sur la possibilité de créer des extensions du protocole SSH, permettant d'attacher des données arbitraires aux certificats SSH. Après une authentification via OpenID, le client génère une clé publique contenant un jeton PK, confirmant l'appartenance de la clé à l'utilisateur déclaré. Le jeton est intégré dans le protocole SSH via un champ de données supplémentaires dans le certificat SSH. La création et la vérification des jetons PK du côté du serveur s'effectuent à l'aide du protocole cryptographique OpenPubKey.
OpenPubKey permet de générer une clé publique et de l'associer à un token délivré par un fournisseur OpenID. Par le biais d'une signature numérique, le fournisseur confirme que cette clé a été créée par l'utilisateur authentifié déclaré. Par exemple, le fournisseur OpenID Google peut confirmer que l'utilisateur est authentifié en tant que test@gmail.com. Du côté serveur, il s'agit de vérifier si le token associé a été signé par le fournisseur OpenID et si la signature numérique correspond à la clé publique déclarée, c'est-à-dire que le serveur peut s'assurer que c'est bien l'utilisateur test@gmail.com qui a créé la clé publique pour le client SSH connecté.

L'intégration avec OpenSSH est organisée par la spécification du programme opkssh dans le fichier de configuration «sshd_config» via la directive «AuthorizedKeysCommand» (par exemple : «AuthorizedKeysCommand /usr/local/bin/opkssh verify %u %k %t»). La configuration du lien entre les comptes et OpenID s'effectue du côté du serveur SSH. Du côté client SSH, aucune modification n'est requise, mais avant de se connecter, il est nécessaire d'exécuter la commande «opkssh login» et de sélectionner le fournisseur OpenID dans la fenêtre de navigateur qui apparaît pour effectuer l'authentification.
L'outil opkssh génèrera des clés SSH et obtiendra un token PK confirmant que l'utilisateur a réussi l'authentification et permettant de vérifier que les clés créées appartiennent à l'utilisateur déclaré. La clé publique SSH, à laquelle le token PK est attaché via un champ de données supplémentaires, sera enregistrée dans le fichier ~/.ssh/id_ecdsas et commencera à être transmise lors de la connexion au serveur outil ssh.
La connexion au serveur se fait en utilisant le schéma standard SSH «ssh login@serveur», à condition que le le serveur login ait préalablement été identifié avec le compte OpenID utilisé par l'utilisateur. Ainsi, le fonctionnement consiste à ce que le client SSH envoie la clé publique au serveur SSH, tandis que le serveur exécute la commande «opkssh verify» pour vérifier la clé.
Pour lier un compte à OpenID, l'administrateur du serveur exécute la commande «opkssh add». Par exemple, pour permettre l'accès au serveur sous l'utilisateur «root» avec authentification OpenID via le compte test@gmail.com sur Gmail, il faut exécuter «sudo opkssh add root test@gmail.com google», après quoi le client pourra se connecter avec les paramètres de ce compte en exécutant la commande «ssh root@hôte_serveur».
La liaison du compte peut également être effectuée manuellement via le fichier de configuration /etc/opk/auth_id (ou ~/.opk/auth_id), dans lequel pour l'exemple ci-dessus, la ligne « root test@gmail.com https://accounts.google.com » sera écrite. De plus, vous pouvez définir la liste des fournisseurs OpenID autorisés, leurs paramètres et la liste des identifiants clients autorisés dans le fichier /etc/opk/providers.

Source : opennet.ru
