Comment configurer des clés SSH sur Ubuntu 20.04

De Get Docs
Aller à :navigation, rechercher

Introduction

SSH, ou shell sécurisé, est un protocole crypté utilisé pour administrer et communiquer avec les serveurs. Lorsque vous travaillez avec un serveur Ubuntu, 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 Ubuntu 20.04. Les clés SSH offrent un moyen sécurisé de se connecter à votre serveur et sont recommandées pour tous les utilisateurs.

Étape 1 - Création de la paire de clés

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, les versions récentes de ssh-keygen créeront une paire de clés RSA 3072 bits, ce qui est suffisamment sécurisé pour la plupart des cas d'utilisation (vous pouvez éventuellement passer l'indicateur -b 4096 pour créer une paire de clés 4096 bits plus grande clé).

Après avoir saisi la commande, vous devriez voir le résultat suivant :

OutputGenerating 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 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 avec 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 alors voir l'invite suivante :

OutputEnter passphrase (empty for no passphrase):

Ici, vous pouvez éventuellement entrer une phrase de passe sécurisée, ce qui est fortement recommandé. Une phrase de passe 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 par clé SSH sur un serveur Linux.

Vous devriez alors voir une sortie semblable à la suivante :

OutputYour 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:/hk7MJ5n5aiqdfTVUZr+2Qt+qCiS7BIm5Iv0dxrc3ks [email protected]
The key's randomart image is:
+---[RSA 3072]----+
|                .|
|               + |
|              +  |
| .           o . |
|o       S   . o  |
| + o. .oo. ..  .o|
|o = oooooEo+ ...o|
|.. o *o+=.*+o....|
|    =+=ooB=o.... |
+----[SHA256]-----+

Vous disposez maintenant 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 - Copie de la clé publique sur votre serveur Ubuntu

Le moyen le plus rapide de copier votre clé publique sur l'hôte Ubuntu consiste à 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 ordinateur client, 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, vous pouvez donc l'avoir disponible sur votre système local. Pour que cette méthode fonctionne, vous devez déjà disposer d'un accès SSH basé sur un mot de passe à votre serveur.

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

La syntaxe est :

ssh-copy-id [email protected]_host

Vous pouvez voir le message suivant :

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

Ensuite, l'utilitaire analysera votre compte local pour 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 keys
[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 sur l'hôte distant à l'aide du 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 d'accueil ~/.ssh du compte distant appelé authorized_keys.

Vous devriez voir la sortie suivante :

OutputNumber of key(s) added: 1

Now 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 à Étape 3.

Copie de la clé publique à l'aide de SSH

Si vous ne disposez pas de ssh-copy-id, mais que vous disposez d'un accès SSH basé sur un mot de passe à un compte sur votre serveur, vous pouvez télécharger vos clés à l'aide d'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 la transmettant via une connexion SSH au serveur distant.

De l'autre côté, nous pouvons nous assurer que le répertoire ~/.ssh existe et dispose des autorisations appropriées sous le compte que nous utilisons.

Nous pouvons ensuite sortir le contenu que nous avons redirigé vers 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 :

OutputThe 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, vous devriez être invité à saisir le mot de passe du compte d'utilisateur distant :

[email protected]'s password:

Après saisie de 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 à Étape 3 si cela a réussi.

Copie manuelle de 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, saisissez ceci dans votre ordinateur local :

cat ~/.ssh/id_rsa.pub

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

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

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 disposent des autorisations appropriées :

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 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 didacticiel, notre utilisateur s'appelle sammy, mais vous devez remplacer 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 sur votre serveur Ubuntu à l'aide de 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 fournir le mot de passe du compte distant.

Le processus de base est le même :

ssh [email protected]_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 pouvez voir quelque chose comme ceci :

OutputThe 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" puis appuyez sur ENTER pour continuer.

Si vous n'avez pas fourni de phrase secrète pour votre clé privée, vous serez immédiatement connecté. Si vous avez fourni une phrase de passe pour la clé privée lorsque vous avez créé la clé, vous serez invité à la saisir maintenant (notez que vos frappes ne s'afficheront pas dans la session de terminal pour des raisons de sécurité). Après l'authentification, une nouvelle session shell devrait s'ouvrir pour vous avec le compte configuré sur le serveur Ubuntu.

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

Étape 4 - Désactivation de 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 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 de suivre les étapes de cette section, assurez-vous que l'authentification basée sur la clé SSH est configurée pour le compte racine sur ce serveur ou, de préférence, que l'authentification basée sur la clé SSH est configurée pour un compte non root sur ce serveur avec les privilèges sudo. Cette étape verrouillera les connexions basées sur un mot de passe, il est donc crucial de s'assurer 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 des clés SSH, soit en tant que root ou avec un compte avec des privilèges sudo. Ensuite, ouvrez le fichier de configuration du démon SSH :

sudo nano /etc/ssh/sshd_config

Dans le fichier, recherchez une directive appelée PasswordAuthentication. Cette ligne peut être commentée avec un # au début de la ligne. Décommentez la ligne en supprimant # et définissez la valeur sur no. Cela désactivera votre capacité à vous connecter via SSH en utilisant les mots de passe du 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 activer réellement ces modifications, nous devons redémarrer le service sshd :

sudo systemctl restart ssh

Par précaution, ouvrez une nouvelle fenêtre de terminal et testez le bon fonctionnement du service SSH avant de fermer votre session en cours :

ssh [email protected]_host

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

Le démon SSH sur votre serveur Ubuntu ne répond désormais qu'à l'authentification basée sur la clé SSH. Les connexions basées sur un mot de passe ont été désactivées.

Conclusion

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

Si vous souhaitez en savoir plus sur l'utilisation de SSH, consultez notre SSH Essentials Guide.