SSH : authentification par clés

Dans ce tutoriel, je vais vous expliquer comment faire pour vous connecter à un serveur / ordinateur linux en SSH sans mot de passe en utilisant une paire de clés (privé / publique).

Générer la paire de clés avec ssh-keygen

Pour générer une paire de clés, il faut avoir un client SSH disponible, il est possible de le faire depuis Windows 10 ou un Linux.

Dans ce tutoriel, j’ai utilisé mon ordinateur Windows 10.

Pour générer une paire de clés, entrer la commande ci-dessous :

ssh-keygen -b 4096

-b 4096 permet de générer une clé sur 4096 bit, par défaut c’est 2048

Dans un premier temps, le générateur vous demande d’indiquer le fichier où celle-ci est stockée, par défaut le nom du fichier id_rsa. Pour utiliser la valeur par défaut appuyer sur Entrée.

Si vous avez un doute, vérifier avant si une paire de clés est présente dans le dossier utilisateur/.ssh de votre ordinateur, car celle-ci sera écrasée.

Ensuite vous pouvez saisir un mot de passe pour protéger la clé privée, laisser vide pour ne pas avoir de mot de passe.

Si vous entrez un mot de passe celui-ci sera demandé à chaque connexion, dans un environnement critique, je vous conseille de mettre un mot de passe.

Après validation du mot de passe, la clé est générée :

Aller ensuite dans le dossier .ssh et afficher le contenu, on retrouve les fichiers de notre paire de clés.

Le fichier id_rsa est la clé privée, celle qui doit rester sur votre ordinateur et le fichier id_rsa.pub est la clé publique que l’on va installer le ou les serveurs SSH pour se connecter dessus.

Je vous conseille très fortement de sauvegarder votre paire de clés.

Configurer le serveur SSH

Maintenant que l’on a une paire de clés, on va configurer notre serveur SSH afin de se connecter dessus en une paire de clés.

Dans les faits, on va surtout configurer notre clé publique sur un compte utilisateur pour se connecter sans mot de passe ( rdrit ).

Bien évidemment, on ne fait pas ça sur le compte root…

Sur le serveur linux, aller dans le dossier home de l’utilisateur avec lequel vous souhaitez vous connecter.

Vérifier sur le dossier .ssh est présent (ll).

Si le dossier n’existe pas, créer le :

mkdir .ssh

Dans le dossier .ssh si celui-ci est présent, vérifier si le fichier authorized_keys existe. Sinon il faut le créer :

touch .ssh/authorized_keys

Ensuite éditer le fichier authorized_keys avec nano par exemple, dans lequel on va copier la clé publique.

nano .ssh/authorized_keys

Copier la clé publique qui se trouve dans le fichier id_rsa.pub.

Quitter l’éditeur en sauvegardant le fichier.

À partir de maintenant, vous pouvez vous connecter depuis votre ordinateur à l’ordinateur linux en SSH sans mot de passe.

ssh utilisateur@ip_serveur

Désactiver l’authentification par mot de passe sur le serveur SSH

Cette étape est facultative, mais augmenter le niveau de sécurité de votre serveur, une attaque par brute force avec une clé privée sur 4096 bits est très longue et difficile à réaliser.

Avant d’effectuer cette opération, il est nécessaire de prendre une précaution très importante, avec un accès à l’ordinateur autrement qu’en SSH, c’est-à-dire un accès de type KVM pour une VPS sur louer sur Internet ou un accès aux consoles de type Hyper-V/VMWare ou pour un serveur physique, un accès physique ou par ILO/Idrac.

Dans le cas d’un serveur physique loué (Scaleway, OVH …), les serveurs d’entrés de gamme ne dispose pas d’accès KVM, en cas de perte de votre clé publique ou privé, il sera impossible de reprendre la main de dessus.

Éditer le fichier de configuration du serveur SSH

sudo nano /etc/ssh/sshd_config

Rechercher la directive PasswordAuthentication, si celle-ci est commentée, il faut la décommenter et passer la valeur à no. Si elle n’existe pas créé la ligne.

Sauvegarder le fichier et redémarrer le service ssh pour appliquer la configuration.

sudo systemctl restart sshd

Il n’est maintenant plus possible de se connecter avec un mot de passe.

Utiliser sudo sans mot de passe

Dernière partie de ce tutoriel, je vais vous expliquer comment faire en sorte de ne pas avoir de demande de mot de passe lors de l’utilisation de sudo.

Cette manipulation augmente l’exposition de votre serveur, surtout en cas de vol de votre clé privée.

Ouvrir le fichier /etc/sudoers avec nano.

sudo visudo /etc/sudoers

A la fin ajouter la ligne ci-dessous en adaptant à votre utilisateur :

utilisateur    ALL=(ALL) NOPASSWD:ALL

Sauvegarder le fichier.

Maintenant vous pouvez exécuter des commandes sudo sans demande de mot de passe.




Laisser un commentaire