Guide pour SSH avec une clé FIDO2
Par Tournesol • Lecture 4 min. •
J’ai récemment acheté des clés USB FIDO2 pour stocker et sécuriser mes mots de passes. C’est vraiment cool de pouvoir se connecter partout tant que j’ai mes clés USB.
Mais on peut aussi les utiliser pour stocker des clés SSH. On peut les stocker directement sur la clé FIDO2 et donc les utiliser sur n’importe quel appareil. Vous pouvez même oublier de retirer la clé privées d’un appareil puisqu’elle ne pourra être utilisé que si la clé FIDO2 est insérée et que vous la touchiez.
Cet article est grandement inspiré de celui écrit par Jonas Markström The complete guide to SSH with FIDO2 security keys
Prérequis
- OpenSSH version
8.3minimum d’installé - Avoir une clé de sécurité FIDO2 avec PIN (Token2, Yubikey,…)
Créer la clé SSH résidente
ssh-keygen -t ed25519-sk -O resident -O verify-required -O application=ssh:mainOn peut rajouter -C “Commentaire” pour rajouter un commentaire dans les fichiers.
Je préfère -O application=ssh:main où “main” est la description de la clé. À chaque recréation avec ssh-keygen -K, “main” sera utiliser comme suffixe des fichiers ainsi que commentaire de la clé publique.
ssh: est nécessaire pour être détecté par OpenSSH.
Pas besoin de mot de passe comme le pin est demandé.
Cela va écrire 2 fichiers : une clé privée et une publique.
En réalité, la clé privée écrite sur l’ordi est la moitié de la clé et dirige vers l’autre moitié qui est stockées sur la clé USB
Configurer un nouveau client SSH
Changer de dossiers vers ~/.ssh et faites ssh-keygen -K va écrire toutes les clés publiques et secrètes.
On peut maintenant les utiliser comme des clés publiques et secrètes mais qui nécessitent d’avoir une la clé USB sur l’ordi et pouvoir la toucher.
Configurer le serveur SSH
Dans /etc/ssh/sshd_config, il est possible de rajouter PubkeyAuthOptions verify-required pour forcer la vérification utilisateur FIDO2 (PIN ou biométrique).
Cet exemple de sshd_config montre les changements que je fais habituellement outre le changement de port SSH.
# Support public key cryptography (includes FIDO2)
PubkeyAuthentication yes
# Make sure User Verification is performed
PubkeyAuthOptions verify-required
# Disable root login via SSH
PermitRootLogin without-password
# Disable passwords
PasswordAuthentication no
PermitEmptyPasswords noPartager la clé publique de l’utilisateur
En utilisant ssh-copy-id
Si vous avez déjà un accès SSH, c’est rapide, c’est propre ssh-copy-id -i ~/.ssh/id_ed25519_sk.pub user@host
En éditant authorized_keys directement
Ouvrez le fichier, souvent ~/.ssh/authorized_keys, et ajouter la clé publique à la dernière ligne.
SSH agent temporaire
Jusqu’au prochain redémarrage, les clés SSH seront toujours disponible dans l’agent SSH.
eval "$(ssh-agent -s)"
ssh-add -Keval (ssh-agent -c)
ssh-add -KSi besoin de tuer un ssh agent existant, il suffit de faire un eval (ssh-agent -k).
SSSD
Ché pas ce que c’est mais ça a l’air cool pour rassembler les clés publiques à un seul et unique endroit.
Tips en vrac
SSH via “jump host” avec FIDO2
“ProxyJump” permets d’accéder à une machine distante via une machine intermédiaire. Ça peut être pratique pour réduire les surfaces d’attaques, mettre en commun des instructions SSH ou pour avoir un unique point d’entrèe dans un réseau interne.
ssh -J <jump host> <remote server>
Il suffit d’avoir la clé publique partagée sur le jump host et la destination.
Exemple de ~/.ssh/config
Host *
IdentityFile ~/.ssh/id_ed25519_sk_xyz1
IdentityFile ~/.ssh/id_ed25519_sk_xyz2
IdentityAgent none
IdentitiesOnly yes
ControlPath ~/.ssh/controlmasters/%r@%h:%p
ControlMaster auto
ControlPersist 30m
Host hostName
User userName
Port 22Host * permets d’éviter de se répéter en entrant une configuration par défaut.
Le premier bloc gère les identités avec 2 clés et IdentitiesOnly yes permets de forcer à utiliser que ces identités là. Ça évite les erreurs si on a trop de clés SSH.
IdentityAgent none est imporaten car les FIDO2 avec verify-required ne semblent pas être supportés par les agents SSH.
Le second permet de partager la connexion entre de multiples sessions sur la même machine mais surtout, garder la connexion ouverte plus longtemps et évite de redemander le pin et la vérification utilisateur toutes les 3 secondes.
Permissions d’accès
- private key (id_ed25519_sk): 600
- public key (id_ed25519_sk.pub): 644
Commentaires
Vous pouvez commenter cet article de blog en y répondant publiquement, avec votre compte Mastodon ou tout autre compte ActivityPub/Fediverse. Les réponses publiques détectées sont affichées ci-dessous.