Comment configurer des clés SSH sur Debian 11

Introduction

SSH, ou Secure Shell, est un protocole crypté utilisé pour administrer et communiquer avec des serveurs. Lorsque vous travaillez avec un serveur Debian, il est probable que vous passiez la plupart de votre temps dans une session de terminal connectée à votre serveur via SSH.

Dans ce guide, nous nous concentrerons sur la configuration des clés SSH pour une installation Debian 11 de base. Les clés SSH fournissent un moyen facile et sécurisé de vous connecter à votre serveur et sont recommandées pour tous les utilisateurs.

Étape 1 — Créer la paire de clés RSA

La première étape consiste à créer une paire de clés sur la machine cliente (généralement votre ordinateur) :

  1. ssh-keygen

Par défaut, ssh-keygen créera une paire de clés RSA de 3072 bits, ce qui est suffisamment sécurisé pour la plupart des cas d’utilisation (vous pouvez éventuellement passer le drapeau -b 4096 pour créer une clé plus grande de 4096 bits).

Après avoir entré la commande, vous devriez voir la sortie suivante :

Output
Generating public/private rsa key pair. Enter file in which to save the key (/your_home/.ssh/id_rsa):

Appuyez sur Entrée pour enregistrer la paire de clés dans le sous-répertoire .ssh/ de votre répertoire personnel, ou spécifiez un chemin alternatif.

Si vous aviez précédemment généré une paire de clés SSH, vous pourriez voir le prompt suivant :

Output
/home/your_home/.ssh/id_rsa already exists. Overwrite (y/n)?

Avertissement : Si vous choisissez de remplacer la clé sur le disque, vous ne pourrez plus vous authentifier en utilisant l’ancienne clé. Soyez très prudent lorsque vous sélectionnez oui, car il s’agit d’un processus destructeur qui ne peut pas être inversé.

Ensuite, vous devriez voir le prompt suivant :

Output
Enter passphrase (empty for no passphrase):

Ici, vous pouvez éventuellement entrer une phrase secrète sécurisée, ce qui est fortement recommandé. Une phrase secrète ajoute une couche de sécurité supplémentaire pour empêcher les utilisateurs non autorisés de se connecter. Pour en savoir plus sur la sécurité, consultez notre tutoriel sur Comment configurer l’authentification basée sur les clés SSH sur un serveur Linux.

Ensuite, vous devriez voir la sortie suivante :

Output
Your identification has been saved in /your_home/.ssh/id_rsa. Your public key has been saved in /your_home/.ssh/id_rsa.pub. The key fingerprint is: SHA256:5E2BtTN9FHPBNoRXAB/EdjtHNYOHzTBzG5qUv7S3hyM root@debian-suricata The key's randomart image is: +---[RSA 3072]----+ | oo .O^XB| | . +.BO%B| | . = .+B+o| | o o o . =.| | S . . =| | o.| | .o| | E o..| | . ..| +----[SHA256]-----+

Vous disposez maintenant d’une clé publique et privée que vous pouvez utiliser pour vous authentifier. La prochaine étape consiste à placer la clé publique sur votre serveur afin que vous puissiez utiliser l’authentification basée sur les clés SSH pour vous connecter.

Étape 2 — Copiez la clé publique sur le serveur Debian

La manière la plus rapide de copier votre clé publique sur l’hôte Debian est d’utiliser un utilitaire appelé ssh-copy-id. En raison de sa simplicité, cette méthode est fortement recommandée si elle est disponible. Si vous n’avez pas ssh-copy-id disponible sur votre machine cliente, vous pouvez utiliser l’une des deux méthodes alternatives fournies dans cette section (copie via SSH basée sur le mot de passe, ou copie manuelle de la clé).

Copie de la clé publique en utilisant ssh-copy-id

L’outil ssh-copy-id est inclus par défaut dans de nombreux systèmes d’exploitation, vous pouvez donc l’avoir disponible sur votre système local. Pour que cette méthode fonctionne, vous devez déjà avoir un accès SSH basé sur un mot de passe à votre serveur.

Pour utiliser l’utilitaire, vous devez simplement spécifier l’hôte distant auquel vous souhaitez vous connecter et le compte utilisateur auquel vous avez un accès SSH basé sur un mot de passe. Il s’agit du compte vers lequel votre clé SSH publique sera copiée.

La syntaxe est la suivante :

  1. ssh-copy-id username@remote_host

Vous pouvez voir le message suivant :

Output
The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established. ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe. Are you sure you want to continue connecting (yes/no)? yes

Cela signifie que votre ordinateur local ne reconnaît pas l’hôte distant. Cela se produira la première fois que vous vous connecterez à un nouvel hôte. Tapez « oui » et appuyez sur ENTRÉE pour continuer.

Ensuite, l’utilitaire analysera votre compte local à la recherche de la clé id_rsa.pub que nous avons créée précédemment. Lorsqu’il trouve la clé, il vous demandera le mot de passe du compte utilisateur distant :

Output
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys username@203.0.113.1's password:

Tapez le mot de passe (votre saisie ne sera pas affichée pour des raisons de sécurité) et appuyez sur ENTRÉE. L’utilitaire se connectera ensuite au compte sur l’hôte distant en utilisant le mot de passe que vous avez fourni. Il copiera ensuite le contenu de votre clé ~/.ssh/id_rsa.pub dans un fichier du répertoire ~/.ssh du compte distant appelé authorized_keys.

Vous devriez voir la sortie suivante:

Output
Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'username@203.0.113.1'" and check to make sure that only the key(s) you wanted were added.

À ce stade, votre clé id_rsa.pub a été téléchargée sur le compte distant. Vous pouvez continuer à Étape 3.

Copier la clé publique à l’aide de SSH

Si vous n’avez pas ssh-copy-id disponible, mais que vous avez un accès SSH basé sur un mot de passe à un compte sur votre serveur, vous pouvez télécharger vos clés en utilisant une méthode SSH conventionnelle.

Nous pouvons le faire en utilisant la commande cat pour lire le contenu de la clé SSH publique sur notre ordinateur local et en passant cela à travers une connexion SSH vers le serveur distant.

D’autre part, nous pouvons nous assurer que le répertoire ~/.ssh existe et a les permissions correctes sous le compte que nous utilisons.

Nous pouvons ensuite afficher le contenu que nous avons transféré dans un fichier appelé authorized_keys dans ce répertoire. Nous utiliserons le symbole de redirection >> pour ajouter le contenu sans l’écraser. Cela nous permettra d’ajouter des clés sans détruire les clés précédemment ajoutées.

La commande complète ressemble à ceci:

  1. cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys"

Vous pouvez voir le message suivant:

Output
The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established. ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe. Are you sure you want to continue connecting (yes/no)? yes

Cela signifie que votre ordinateur local ne reconnaît pas l’hôte distant. Cela se produira la première fois que vous vous connecterez à un nouvel hôte. Tapez « yes » et appuyez sur ENTRÉE pour continuer.

Ensuite, vous devriez être invité à entrer le mot de passe du compte utilisateur distant :

Output
username@203.0.113.1's password:

Après avoir saisi votre mot de passe, le contenu de votre clé id_rsa.pub sera copié à la fin du fichier authorized_keys du compte utilisateur distant. Poursuivez jusqu’à l’étape 3 si cela a été réussi.

Copie de la clé publique manuellement

Si vous n’avez pas accès SSH basé sur un mot de passe à votre serveur, vous devrez terminer le processus ci-dessus manuellement.

Nous allons ajouter manuellement le contenu de votre fichier id_rsa.pub au fichier ~/.ssh/authorized_keys sur votre machine distante.

Pour afficher le contenu de votre clé id_rsa.pub, tapez ceci dans votre ordinateur local :

  1. cat ~/.ssh/id_rsa.pub

Vous verrez le contenu de la clé, qui devrait ressembler à ceci :

Output
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDgkLJ8d2gGEJCN7xdyVaDqk8qgeZqQ0MlfoPK3TzWI5dkG0WiZ16jrkiW/h6lhO9K1w89VDMnmNN9ULOWHrZMNs//Qyv/oN+FLIgK2CkKXRxTmbh/ZGnqOm3Zo2eU+QAmjb8hSsstQ3DiuGu8tbiWmsa3k3jKbWNWpXqY3Q88t+bM1DZrHwYzaIZ1BSA1ghqHCvIZqeP9IUL2l2DUfSCT9LXJEgMQhgjakJnzEGPgd5VHMR32rVrbIbbDzlyyoZ7SpCe5y0vYvbV2JKWI/8SEOmwehEHJ9RBZmciwc+1sdEcAJVMDujb9p5rX4hyvFpG0KGhZesB+/s7PdOa8zlIg4TZhXUHl4t1jpPC83Y9KEwS/Ni4dhaxlnr3T6l5hUX2cD+eWl1vVpogBqKNGBMrVR4dWs3Z4BVUf9exqTRRYOfgo0UckULqW5pmLW07JUuGo1kpFAxpDBPFWoPsg08CGRdEUS7ScRnMK1KdcH54kUZr0O88SZOsv9Zily/A5GyNM= demo@test

Accédez à votre hôte distant en utilisant la méthode disponible.

Une fois que vous avez accès à votre compte sur le serveur distant, assurez-vous que le répertoire ~/.ssh existe. Cette commande créera le répertoire si nécessaire, ou ne fera rien s’il existe déjà :

  1. mkdir -p ~/.ssh

Maintenant, vous pouvez créer ou modifier le fichier authorized_keys dans ce répertoire. Vous pouvez ajouter le contenu de votre fichier id_rsa.pub à la fin du fichier authorized_keys, en le créant si nécessaire, en utilisant cette commande :

  1. echo public_key_string >> ~/.ssh/authorized_keys

Dans la commande ci-dessus, remplacez public_key_string par la sortie de la commande cat ~/.ssh/id_rsa.pub que vous avez exécutée sur votre système local. Il devrait commencer par ssh-rsa AAAA....

Enfin, nous nous assurerons que le répertoire ~/.ssh et le fichier authorized_keys ont les autorisations appropriées :

  1. chmod -R go= ~/.ssh

Cela supprime de manière récursive toutes les autorisations « groupe » et « autre » pour le répertoire ~/.ssh/.

Si vous utilisez le compte root pour configurer des clés pour un compte utilisateur, il est également important que le répertoire ~/.ssh appartienne à l’utilisateur et non à root :

  1. chown -R sammy:sammy ~/.ssh

Dans ce tutoriel, notre utilisateur s’appelle sammy mais vous devez substituer le nom d’utilisateur approprié dans la commande ci-dessus.

Vous pouvez maintenant tenter une authentification sans mot de passe avec votre serveur Debian.

Étape 3 — Authentification au serveur Debian en utilisant des clés SSH

Si vous avez réussi à effectuer l’une des procédures ci-dessus, vous devriez pouvoir vous connecter à l’hôte distant sans le mot de passe du compte distant.

Le processus général est le même :

  1. ssh username@remote_host

Si c’est votre première fois de vous connecter à cet hôte (si vous avez utilisé la dernière méthode ci-dessus), vous pouvez voir quelque chose comme ceci :

Output
The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established. ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe. Are you sure you want to continue connecting (yes/no)? yes

Cela signifie que votre ordinateur local ne reconnaît pas l’hôte distant. Tapez « yes » puis appuyez sur ENTRÉE pour continuer.

Si vous n’avez pas fourni de phrase secrète pour votre clé privée, vous serez connecté immédiatement. Si vous avez fourni une phrase secrète pour la clé privée lors de sa création, on vous demandera de la saisir maintenant (notez que vos frappes ne s’afficheront pas dans la session du terminal pour des raisons de sécurité). Après vous être authentifié, une nouvelle session shell devrait s’ouvrir pour vous avec le compte configuré sur le serveur Debian.

Si l’authentification basée sur la clé a réussi, poursuivez pour apprendre comment sécuriser davantage votre système en désactivant l’authentification par mot de passe.

Étape 4 — Désactiver l’authentification par mot de passe sur votre serveur

Si vous avez pu vous connecter à votre compte en utilisant SSH sans mot de passe, vous avez configuré avec succès l’authentification basée sur les clés SSH pour votre compte. Cependant, votre mécanisme d’authentification basé sur le mot de passe est toujours actif, ce qui signifie que votre serveur est toujours exposé aux attaques par force brute.

Avant de terminer les étapes de cette section, assurez-vous d’avoir configuré l’authentification basée sur les clés SSH pour le compte root sur ce serveur, ou de préférence, d’avoir configuré l’authentification basée sur les clés SSH pour un compte non root sur ce serveur avec des privilèges sudo. Cette étape verrouillera les connexions basées sur les mots de passe, il est donc crucial de garantir que vous pourrez toujours obtenir un accès administratif.

Une fois que vous avez confirmé que votre compte distant dispose de privilèges administratifs, connectez-vous à votre serveur distant avec les clés SSH, soit en tant que root, soit avec un compte ayant des privilèges sudo. Ensuite, ouvrez le fichier de configuration du démon SSH:

  1. sudo nano /etc/ssh/sshd_config

À l’intérieur du fichier, recherchez une directive appelée PasswordAuthentication. Celle-ci peut être commentée. Décommentez la ligne et définissez la valeur sur « no ». Cela désactivera votre capacité à vous connecter via SSH en utilisant des mots de passe de compte:

/etc/ssh/sshd_config
...
PasswordAuthentication no
...

Enregistrez et fermez le fichier lorsque vous avez terminé en appuyant sur CTRL + X, puis sur Y pour confirmer l’enregistrement du fichier, et enfin sur ENTER pour quitter nano. Pour appliquer réellement ces modifications, nous devons redémarrer le service sshd:

  1. sudo systemctl restart ssh

Par mesure de précaution, ouvrez une nouvelle fenêtre de terminal et testez que le service SSH fonctionne correctement avant de fermer cette session:

  1. ssh username@remote_host

Une fois que vous avez vérifié votre service SSH, vous pouvez en toute sécurité fermer toutes les sessions serveur actuelles.

Le démon SSH sur votre serveur Debian répond désormais uniquement aux clés SSH. L’authentification basée sur les mots de passe a été désactivée avec succès.

Conclusion

Vous devriez maintenant avoir configuré l’authentification basée sur les clés SSH sur votre serveur, vous permettant de vous connecter sans fournir de mot de passe de compte.

Si vous souhaitez en savoir plus sur le travail avec SSH, consultez notre Guide essentiel sur SSH.

Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys-on-debian-11