Comment configurer les clés SSH sur CentOS 7

Introduction

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

Dans ce guide, nous nous concentrerons sur la configuration des clés SSH pour une installation CentOS 7 vanille. Les clés SSH fournissent un moyen simple et sécurisé de se connecter à votre serveur et sont recommandées pour tous les utilisateurs.

Etape 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) :

  • ssh-keygen

Par défaut, ssh-keygen créera une paire de clés RSA de 2048 bits, ce qui est suffisamment sécurisé pour la plupart des cas d’utilisation (vous pouvez éventuellement passer dans le drapeau -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 ENTER pour enregistrer la paire de clés dans le sous-répertoire .ssh/ de votre répertoire personnel, ou spécifiez un autre chemin.

Si vous aviez précédemment généré une paire de clés SSH, vous pouvez voir l’invite suivante :

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 en utilisant la clé précédente. Soyez très prudent lorsque vous sélectionnez oui, car il s’agit d’un processus destructeur qui ne peut pas être inversé.

Vous devriez ensuite voir l’invite suivante:

Output
Enter passphrase (empty for no passphrase):

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

Vous devriez alors 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:a9:49:2e:2a:5e:33:3e:a9:de:4e:77:11:58:b6:90:26 [email protected]_hostThe key's randomart image is:+------+| ..o || E o= . || o. o || .. || ..S || o o. || =o.+. ||. =++.. ||o=++. |+-----------------+

Vous avez maintenant une clé publique et une clé 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.

Etape 2 – Copier la clé publique sur le 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. En raison de sa simplicité, cette méthode est fortement recommandée si elle est disponible. Si vous n’avez pas ssh-copy-id à votre disposition sur votre machine cliente, vous pouvez utiliser l’une des deux méthodes alternatives fournies dans cette section (copie via SSH basée sur un mot de passe, ou copie manuelle de la clé).

Copier votre 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 à disposition sur votre système local. Pour que cette méthode fonctionne, vous devez déjà avoir un accès SSH par mot de passe à votre serveur.

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

La syntaxe est :

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 simplement 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 ENTER pour continuer.

Puis, l’utilitaire va rechercher dans votre compte local 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 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 [email protected]'s password:

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

Vous devriez voir la sortie suivante :

Output
Number of key(s) added: 1Now try logging into the machine, with: "ssh '[email protected]'"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 en utilisant SSH

Si vous n’avez pas ssh-copy-id de 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é publique SSH sur notre ordinateur local et le canaliser via une connexion SSH au serveur distant.

De l’autre côté, nous pouvons nous assurer que le répertoire ~/.ssh existe et a les bonnes permissions sous le compte que nous utilisons.

Nous pouvons ensuite sortir le contenu que nous avons pipé dans un fichier appelé authorized_keys dans ce répertoire. Nous utiliserons le symbole de redirection >> pour ajouter le contenu au lieu de 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:

  • cat ~/.ssh/id_rsa.pub | ssh [email protected]_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 « oui » et appuyez sur ENTER pour continuer.

Après cela, vous devriez être invité à entrer le mot de passe du compte de l’utilisateur distant:

Output
[email protected]'s password:

Après avoir entré 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 cela a réussi.

Copier la clé publique manuellement

Si vous ne disposez pas d’un accès SSH par 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 de 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 à quelque chose comme 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== [email protected]

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 créera le répertoire si nécessaire, ou ne fera rien 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, en utilisant cette commande:

  • echo public_key_string >> ~/.ssh/authorized_keys

Dans la commande ci-dessus, remplacez le 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 allons nous assurer que le répertoire ~/.ssh et le fichier authorized_keys ont les permissions appropriées définies:

  • chmod -R go= ~/.ssh

Ceci supprime récursivement toutes les permissions « groupe » et « autre » 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 à root:

  • 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.

Nous pouvons maintenant tenter une authentification sans mot de passe avec notre serveur Ubuntu.

Étape 3 – Authentification à votre serveur CentOS en utilisant des clés SSH

Si vous avez réussi 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 de base est le même :

Si c’est votre première connexion à 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 « oui » et appuyez ensuite sur ENTER pour continuer.

Si vous n’avez pas fourni de phrase de passe pour votre clé privée, vous serez connecté immédiatement. Si vous avez fourni une phrase de passe pour la clé privée lorsque vous l’avez créée, vous serez invité à entrer la phrase de passe maintenant. Après l’authentification, une nouvelle session shell devrait s’ouvrir pour vous avec le compte configuré sur le serveur CentOS.

Si l’authentification basée sur la clé a réussi, continuez 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 la clé SSH à 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 soit configuré l’authentification par clé SSH pour le compte root sur ce serveur, ou de préférence, que vous avez configuré l’authentification par clé SSH pour un compte non-root sur ce serveur avec des privilèges sudo. Cette étape verrouillera les connexions basées sur des mots de passe, donc s’assurer que vous serez toujours en mesure d’obtenir un accès administratif est crucial.

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 avec 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. Celle-ci peut être commentée. Appuyez sur i pour insérer du texte, puis décommentez la ligne et mettez la valeur à « non ». Cela désactivera votre capacité à vous connecter via SSH en utilisant les mots de passe du compte :

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

Quand vous avez fini de faire des changements, appuyez sur ESC et ensuite sur :wq pour écrire les changements dans le fichier et quitter. Pour mettre réellement en œuvre ces changements, nous devons redémarrer le service sshd:

  • sudo systemctl restart sshd.service

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

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

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

Conclusion

Vous devriez maintenant avoir l’authentification basée sur la clé SSH configurée sur votre serveur, ce qui vous permet de vous connecter sans fournir le mot de passe d’un compte.

Si vous souhaitez en savoir plus sur le travail avec SSH, jetez un coup d’œil à notre Guide des éléments essentiels de SSH.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.