Logo

Activer la connexion par clé SSH sur un serveur Linux

Introduction

Afin de faire du password-less en toute sécurité (ou mettre en place une 2auth), et restreindre au mieux vos accès, l'utilisation de clés SSH pour se connecter à distance sur vos serveur est le moyen incontournable,

Ici nous allons voir comment mettre en place une authentification sans mot de passe sécurisée sur l'infra suivante :

  • Un serveur Debian qui sera le serveur distant où l'on souhaite se connecter
  • Un client Linux Fedora
  • Un client Windows 11

J'ai choisi volontairement deux clients différent afin de montrer comment faire sur les deux OS.

Pré-requis :

L'accès à la commande ssh-keygen, soit :

  • OpenSSH installé sur votre Linux
  • Sur Windows, le client SSH par défaut permet d'effectuer un SSH keygen

Génération des clés SSH (SSH et Windows)

Ici, rien de bien sorcier, si vous n'avez pas de clé SSH générée sur votre PC (ce qui est probablement le cas), on va entrer la commande suivante :

ssh-keygen -t ed25519 -C "mail@it-discover.fr"

Ici, on spécifie ed25519, mais on pourrait très bien choisir un autre format (RSA par exemple )

ssh-keygen -b 4096 -t rsa -C "mail@it-discover.fr"

Une fois la commande entrée, on peut garder le nom par défaut, ou indiquer un chemin et nom différent de fichier, ici on va appeler là clé 'test' : SSH_Gen1

Ensuite, le prompt nous demande une passphrase. Vous n'êtes pas obligé d'en utiliser une, mais c'est toujours mieux en termes de sécurité.

Vous devriez avoir ce résultat : Capture d'écran 2024-11-19 133014.png

Et maintenant si vous vous rendez dans le dossier de création (ici: C:\Users\erwan/.ssh) vous devriez voir vos deux fichiers, la clé privée et la clé publique :

SSH_Gen3.png

Précision : La clé privée ne doit absolument jamais être publié ou accessible par quelqu'un d'autre que vous, il faut voir ça comme la clé d'un coffre fort. Si celle-ci est divulguée, il vous faudra de toute urgence supprimer la clé publique des sites / machines où elle a été installée.

Envoi de la clé sur le serveur

Il faut faire connaître votre clé publique au serveur afin de lui permettre de gérer l'authentification avec celle-ci, donc pour se faire, deux possibilités :

  • Sur ma machine Fedora : ssh-copy-id [votre_utilisateur]@[ip_du_ serveur]
  • Sur Windows : cat ~/.ssh/id_test.pub | ssh [votre_utilisateur]@[ip_du_serveur] 'mkdir -p ~/.ssh && cat >> .ssh/authorized_keys'

(Remplacez bien sur id_test.pub par votre clé publique)

Sinon vous pouvez simplement copier le contenu de votre id_test.pub dans le fichier .ssh/authorized_keys de votre utilisateur du serveur (il ne sera pas forcément créé par défaut, vous pouvez le faire avec touch .ssh/authorized_keys). Peu importe la méthode, le contenu du fichier ressemblera à ça à la fin : SSH_Gen4.png

Se connecter avec le client

Vous pouvez dès maintenant vous connecter en précisant la clé avec l'option -i et cela va fonctionner. Vous devrez entrer votre passphrase pour vous connecter si vous en avez définit un : ssh -i ~\.ssh\id_test.pub[votre_utilisateur]@[ip_du_serveur]

Cependant cela indique de préciser la clé SSH à chaque fois, et ici on cherche la rapidité.

Utilisation automatique de la clé SSH

Windows

Ouvrez un Powershell en adminstrateur et entrer les commandes suivantes pour démarrer le service d'agent SSH :

Get-Service -Name ssh-agent | Set-Service -StartupType Manual
Start-Service ssh-agent

Il vous faudra après ajouter votre clé privée à l'agent : ssh-add ~/.ssh/id_test

Linux

Sur Linux, vous devez démarrer l'agent comme sur Windows, mais cette fois avec la commande suivante : eval "$(ssh-agent -s)"

Puis on ajoute la clé privée : ssh-add ~/.ssh/id_test

Résultat de la connexion automatique

Maintenant vous pouvez réessayer de vous connecter avec une commande SSH classique et vous pourrez vous connecter sans préciser votre mot de passe :

SSH_Gen5.png

Désactiver les connexions par mot de passe pour les utilisateurs ayant des clés SSH

Vous voulez potentiellement restreindre vos utilisateurs principaux pour qu'ils n'utilisent pas leur password, cependant si vous avez plusieurs utilisateurs, vous en avez probablement qui ne peuvent pas / n'ont pas l'utilité d'avoir de clé SSH. On va apprendre ici à bloquer les connexions par mot de passe pour les utilisateurs ayant des clés SSH configurées.

Nativement, SSH ne permet pas de gérer ce point. Il y a plusieurs moyen de contournement, mais pour moi le plus propre est d'utiliser des groupes. On va créer un groupe additionnel qui contiendra nos utilisateur utilisant une clé SSH.

Pour se faire, rendez-vous sur le serveur et créez un groupe avec la commande suivante :

sudo groupadd passwordless

Ajoutez ensuite l'utilisateur souhaité :

sudo usermod -a -G passwordless erwanc

Remplacez passwordless par le nom de groupe souhaité

Maintenant que ceci est fait, il faut préciser au serveur SSH de gérer ce fonctionnement. Pour se faire, rendez-vous dans le fichier de configuration du serveur :

vim /etc/ssh/sshd_config

Ou pour plus de maintenabilité, je recommande de créer un fichier de configuration séparé qui va "étendre" la configuration initiale :

mkdir /etc/ssh/sshd_config.d/
vim /etc/ssh/sshd_config.d/custom_auth.conf

Si vous choisissez la seconde méthode, ouvrez avec vim le fichier /etc/ssh/sshd_config et insérer la directive suivante :

Include /etc/ssh/sshd_config.d/*.conf

Dans le nouveau fichier ouvert (ou dans /etc/ssh/sshd_config selon votre choix), entrez tout à la fin les directives suivantes :

# Activer l'authentification possible par clé pour tous
PubkeyAuthentication yes

# Désactiver l'authentification par mot de passe pour les membres du groupe
Match Group passwordless
    PasswordAuthentication no

Remplacez passwordless par le nom de groupe précédemment créé

Enfin, il vous suffit de redémarrer le service pour voir la magie opérer : sudo systemctl restart sshd

Poster un commentaire