Tutorial

Comment configurer les clés SSH sur CentOS 8

Linux BasicsCentOSGetting StartedSecuritySystem ToolsCentOS 8

Introduction

SSH, ou secure shell, est un protocole crypté utilisé pour administrer et communiquer avec des serveurs. Lorsque vous travaillez avec un serveur CentOS, il y a de fortes chances que vous passiez la majeure partie de votre temps dans une session terminal connectée à votre serveur par SSH.

Dans ce guide, nous allons nous concentrer sur la configuration des clés SSH pour un serveur CentOS 8. Les clés SSH constituent une méthode simple et sûre pour se connecter à votre serveur et sont recommandées à tous les utilisateurs.

Étape 1 - Créez 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) :

  • ssh-keygen

Par défaut, ssh-keygen créera une paire de clés RSA de 2048 bits, ce qui est suffisamment sûr pour la plupart des cas d'utilisation (vous pouvez éventuellement passer l'indicateur -b 4096 pour créer une clé plus grande de 4096 bits).

Après avoir entré la commande, vous devriez voir l'invite suivante :

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

Appuyez sur la touche ENTER pour enregistrer la paire de clés dans le sous-répertoire .ssh/ de votre répertoire de base, ou indiquez un autre chemin d'accès.

Si vous aviez précédemment généré une paire de clés SSH, vous verrez peut-être s'afficher le message suivant :

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

Si vous choisissez d'écraser la clé sur le disque, vous ne pourrez plus vous authentifier à l'aide de la clé précédente. Soyez très prudent lorsque vous sélectionnez « yes », car il s'agit d'un processus de suppression irréversible.

Vous devriez alors voir le message suivant :

Output
Enter passphrase (empty for no passphrase):

Ici, vous pouvez choisir d'entrer une phrase de passe sécurisée, ce qui est fortement recommandé. Une phrase de passe ajoute une sécurité supplémentaire pour empêcher les utilisateurs non autorisés de se connecter.

Vous devriez alors voir le message suivant :

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: a9:49:2e:2a:5e:33:3e:a9:de:4e:77:11:58:b6:90:26 username@remote_host The key's randomart image is: +--[ RSA 2048]----+ | ..o | | E o= . | | o. o | | .. | | ..S | | o o. | | =o.+. | |. =++.. | |o=++. | +-----------------+

Vous disposez désormais d'une clé publique et privée que vous pouvez utiliser pour vous authentifier. L'étape suivante consiste à placer la clé publique sur votre serveur afin que vous puissiez utiliser l'authentification basée sur la clé SSH pour vous connecter.

Étape 2 - Copiez la clé publique sur votre serveur CentOS

La façon la plus rapide de copier votre clé publique sur l'hôte CentOS est d'utiliser un utilitaire appelé ssh-copy-id. Cette méthode est fortement recommandée si elle est disponible. Si vous ne disposez pas de ssh-copy-id sur votre machine cliente, vous pouvez utiliser l'une des deux méthodes alternatives fournies dans cette section (copie via SSH basé sur un mot de passe, ou copie manuelle de la clé).

Copie de la clé publique à l'aide de ssh-copy-id

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

Pour utiliser l'utilitaire, il vous suffit de spécifier l'hôte distant auquel vous souhaitez vous connecter et le compte utilisateur pour lequel vous disposez d'un accès SSH par mot de passe. C'est le compte sur lequel votre clé publique SSH sera copiée :

  • ssh-copy-id username@remote_host

Vous verrez peut-être 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 ENTER pour continuer.

Ensuite, l'utilitaire recherchera sur votre compte local la clé id_rsa.pub que nous avons créée précédemment. Lorsqu'il trouvera la clé, il vous demandera le mot de passe du compte de l'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:

Saisissez le mot de passe (votre saisie ne sera pas affichée pour des raisons de sécurité) et appuyez sur ENTER. L'utilitaire se connectera 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 le fichier ~/.ssh/authorized_keys du compte distant.

Vous devriez voir le message suivant :

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 passer à l’étape 3.

Copier la clé publique à l'aide de SSH

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

Nous pouvons le faire en utilisant la commande cat pour lire le contenu de la clé publique SSH sur notre ordinateur local et en l'acheminant par une connexion SSH vers le serveur distant.

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

Nous pouvons alors extraire 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 au lieu d'écraser le contenu précédent. 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 :

  • 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 verrez peut-être 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 ENTER pour continuer.

Ensuite, il vous sera demandé de saisir le mot de passe du compte d'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 de l'utilisateur distant. Passez à l’étape 3 si vous avez réussi.

Copier manuellement la clé publique

Si vous ne disposez pas d'un accès SSH basé sur un mot de passe à votre serveur, vous devrez effectuer le processus ci-dessus manuellement.

Nous ajouterons 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 :

  • cat ~/.ssh/id_rsa.pub

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

Output
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle7Q+bqgZ8SeeM8wzytsY+dVGcBxF6N4JS+zVk5eMcV385gG3Y6ON3EG112n6d+SMXY0OEBIcO6x+PnUSGHrSgpBgX7Ks1r7xqFa7heJLLt2wWwkARptX7udSq05paBhcpB0pHtA1Rfz3K2B+ZVIpSDfki9UVKzT8JUmwW6NNzSgxUfQHGwnW7kj4jp4AT0VZk3ADw497M2G/12N0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE+ZHDSCuURNsAInVzgYo9xgJDW8wUw2o8U77+xiFxgI5QSZX3Iq7YLMgeksaO4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL/zkOhvJCACK6Vb15mDOeCSq54Cr7kvS46itMosi/uS66+PujOO+xt/2FWYepz6ZlN70bRly57Q06J+ZJoc9FfBCbCyYH7U/ASsmY095ywPsBo1XQ9PqhnN1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWhcrRf4G2fJLRcGUr9q8/lERo9oxRm5JFX6TCmj6kmiFqv+Ow9gI0x8GvaQ== sammy@host

Accédez à votre hôte distant en utilisant la méthode dont vous disposez.

Une fois que vous avez accès à votre compte sur le serveur distant, vous devez vous assurer que le répertoire ~/.ssh existe. Cette commande va créer le répertoire si nécessaire, ou ne rien faire s'il existe déjà :

  • 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, à l'aide de cette commande :

  • echo public_key_string >> ~/.ssh/authorized_keys

Dans la commande ci-dessus, remplacez la chaîne 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. Elle devrait commencer par ssh-rsa AAAA....

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

  • chmod -R go= ~/.ssh

Cela supprime récursivement toutes les permissions « group » et « other » pour le répertoire ~/.ssh/.

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

  • chown -R sammy:sammy ~/.ssh

Dans ce tutoriel, notre utilisateur est nommé sammy mais vous devez substituer le nom d'utilisateur approprié dans la commande ci-dessus.

Nous pouvons maintenant tenter une authentification par clé avec notre serveur CentOS.

Étape 3 - Connectez-vous à votre serveur CentOS à l'aide de clés SSH

Si vous avez effectué avec succès 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 initial est le même que pour l'authentification par mot de passe :

  • ssh username@remote_host

Si c'est la première fois que vous vous connectez à cet hôte (si vous avez utilisé la dernière méthode ci-dessus), vous verrez peut-être 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 et appuyez sur ENTER pour continuer.

Si vous n'avez pas fourni de phrase de passe lors de la création de votre paire de clés à l'étape 1, vous serez immédiatement connecté. Si vous avez fourni une phrase de passe, vous serez invité à la saisir maintenant. Après authentification, une nouvelle session shell devrait s'ouvrir pour vous avec le compte configuré sur le serveur CentOS .

Si l'authentification par clé a réussi, continuez à apprendre comment sécuriser davantage votre système en désactivant l'authentification par mot de passe de votre serveur SSH.

Étape 4 - Désactivez 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 réussi à configurer une authentification basée sur des clés SSH pour votre compte. Cependant, votre mécanisme d'authentification par mot de passe est toujours actif, ce qui signifie que votre serveur est toujours exposé aux attaques par force brute.

Avant d'effectuer les étapes de cette section, assurez-vous que vous avez configuré une authentification basée sur une clé SSH pour le compte root sur ce serveur, ou de préférence, que vous avez configuré une authentification basée sur une clé SSH pour un compte non root sur ce serveur avec des privilèges sudo. Cette étape permettra de verrouiller les connexions par mot de passe, il est donc essentiel de s'assurer que vous pourrez toujours obtenir un accès administratif.

Une fois que vous avez confirmé que votre compte distant a des privilèges administratifs, connectez-vous à votre serveur distant avec des 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 :

  • sudo vi /etc/ssh/sshd_config

Dans le fichier, recherchez une directive appelée PasswordAuthentication. Ceci peut être commenté avec un # hash. Appuyez sur i pour mettre vi en mode d'insertion, puis décommentez la ligne et réglez la valeur sur non. Cela désactivera votre capacité à vous connecter via SSH en utilisant des mots de passe de compte :

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

Lorsque vous avez fini de faire des modifications, appuyez sur ESC puis sur :wq pour écrire les modifications dans le fichier et quitter. Pour implémenter ces changements de manière effective, nous devons redémarrer le service sshd :

  • sudo systemctl restart sshd

Par précaution, ouvrez une nouvelle fenêtre de terminal et vérifiez que le service SSH fonctionne correctement avant de fermer votre session actuelle :

  • ssh username@remote_host

Une fois que vous avez vérifié que votre service SSH fonctionne toujours correctement, vous pouvez fermer en toute sécurité toutes les sessions de serveur en cours.

Le démon SSH sur votre serveur CentOS ne répond plus qu'aux clés SSH. L'authentification par mot de passe a été désactivée.

Conclusion

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

Si vous souhaitez en savoir plus sur SSH, consultez notre Guide des fondamentaux SSH.

Creative Commons License