Nous en parlions récemment, une Yubikey permet d’ajouter une couche de sécurité physique pour tout accès à distance (applications, serveurs) mais aussi parfois matériel (un téléphone par exemple).

Nous allons voir aujourd’hui comment sécuriser un accès SSH à un serveur avec une Yubikey.

Dans mon cas l’utilité est que j’ai deux ordinateurs professionnels, et qu’à coté de ça je peux amener à vouloir accéder à mes serveurs depuis des ordinateurs tiers. On sait que l’utilisation simple d’un mot de passe n’est vraiment pas recommandé. Me reste l’option d’une paire de clés, mais ça implique de la trimballer et le risque qu’elle se fasse copier. J’ai donc pris l’option 2FA pour une authentification par mot de passe doublé d’une Yubikey.

1 – Client ID et Secret Key

Pour commencer il va falloir générer un client ID et une Secret Key en utilisant l’API de Yubico. Rendez vous sur cette page https://upgrade.yubico.com/getapikey/. Il suffit de renseigner votre adresse e-mail et de générer un code OTP en activant la Yubikey. Enregistrez bien au chaud le Client ID et la Secret Key.

2 – Librairie Yubico

Il faut ensuite accéder à son serveur et installer la librairie de Yubico permettant l’authentification et les requêtes à l’API

sudo apt-get install libpam-yubico

On édite ensuite le fichier sshd :

sudo nano /etc/pam.d/sshd

Et sous la ligne @include common-auth ajoutons

auth required pam_yubico.so id=CLIENT-ID key=SECRET-KEY url=https://api.yubico.com/wsapi/2.0/verify?id=%d&otp=%s

3 – Faire un lien utilisateur/Yubikey

Le principe est connu, il suffit de faire un lien entre chaque utilisateur et une ou des Yubikeys. A la différence que ici les informations doivent être stockées dans ~/.yubico/authorized_yubikeys

Si comme moi vous êtes sous Mac ou Linux, branchez votre clé et dans un terminal copiez la ligne suivante pour récupérer l’ID de votre clé :

read -p "Enter a YubiKey OTP: " s && echo 'The key id is' ${s:0:12}

Coté serveur créons le répertoire et le fichier nécessaire :

mkdir ~/.yubico
nano ~/.yubico/authorized_yubikeys

Et faisons le lien entre un user et sa clé (dans l’exemple nous donnons deux clés):

root:vvukdhrugthk:vvkdtgbdarcx

On relance enfin avec un bon vieux service sshd reload

Gardez votre terminal ouvert et ouvrez une seconde connexion à votre serveur. On vous demandera alors un mot de passe et ensuite un code généré par votre Yubikey.

Acheter une Yubikey 5 NFC (USB A)

Acheter une Yubikey 5 (USB C)