Comment configurer des clés SSH sur Ubuntu 18.04
Vous n'utilisez pas Ubuntu 18.04 ? Choisissez une version ou une distribution différente.
Introduction
SSH, ou shell sécurisé, est un protocole crypté utilisé pour administrer et communiquer avec des serveurs. Lorsque vous travaillez avec un serveur Ubuntu, il y a de fortes chances que vous passiez la plupart de votre temps dans une session terminal connectée à votre serveur via SSH.
Dans ce guide, nous allons nous concentrer sur la configuration des clés SSH pour une installation Ubuntu 18.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 RSA
La première étape consiste à créer une paire de clés sur la machine client (généralement votre ordinateur local) :
- ssh-keygen
Par défaut, ssh-keygen créera une paire de clés RSA de 2048 bits, ce qui est sécurisé pour la plupart des cas d'utilisation (vous pouvez en option passer le drapeau -b 4096 pour créer une clé plus grande de 4096 bits).
Après avoir entré la commande, vous devriez recevoir la sortie suivante :
Generating public/private rsa key pair.
Enter file in which to save the key (/your_home/.ssh/id_rsa):
Appuyez sur ENTRER 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 avez déjà généré une paire de clés SSH, vous pourriez recevoir l'invite suivante :
/home/your_home/.ssh/id_rsa already exists.
Overwrite (y/n)?
Si vous choisissez de remplacer la clé sur le disque, vous ne pourrez plus vous authentifier en utilisant l'ancienne clé. Faites très attention en sélectionnant oui, car c'est un processus destructeur qui ne peut pas être inversé.
L'invite suivante vous demandera de saisir une phrase de passe sécurisée :
Enter passphrase (empty for no passphrase):
Ici, vous avez la possibilité d'entrer une phrase de passe sécurisée, ce qui est fortement recommandé. Une phrase de passe ajoute une couche 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 Comment configurer l'authentification par clé SSH sur un serveur Linux.
Ensemble, la commande ssh-keygen renverra une sortie comme suit :
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 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 par clé SSH pour vous connecter.
Étape 2 — Copier la clé publique sur le serveur Ubuntu
La manière la plus rapide de copier votre clé publique sur l'hôte Ubuntu 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 avec 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, il se peut donc que vous l'ayez disponible sur votre système local.
Remarque : 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'outil, vous spécifiez l'hôte distant auquel vous souhaitez vous connecter, ainsi que le compte utilisateur auquel vous avez accès par SSH avec un mot de passe. C'est ce compte sur lequel votre clé SSH publique sera copiée.
La syntaxe est la suivante :
- ssh-copy-id username@remote_host
Vous pourriez recevoir le message suivant :
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 connectez à un nouvel hôte. Tapez "oui" et appuyez sur ENTRER pour continuer.
Ensuite, l'utilitaire va scanner votre compte local à la recherche de la clé id_rsa.pub que vous avez créée précédemment. Lorsqu'il trouve la clé, il vous demandera le mot de passe du compte de l'utilisateur distant :
/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:
Entrez le mot de passe (rien ne s'affichera 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 un fichier dans le répertoire personnel ~/.ssh du compte distant appelé authorized_keys.
Vous devriez recevoir la sortie suivante :
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.
Copie de la clé publique en utilisant 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. Souvenez-vous, cela ne fonctionnera que si vous avez un accès SSH basé sur un mot de passe à votre serveur.
Vous pouvez le faire en utilisant la commande cat pour lire le contenu de la clé SSH publique sur votre ordinateur local et en le transmettant via une connexion SSH au serveur distant.
D'autre part, vous pouvez vous assurer que le répertoire ~/.ssh existe et a les bonnes autorisations sous le compte que vous utilisez.
Vous pouvez ensuite sortir le contenu que vous avez transféré dans un fichier appelé authorized_keys dans ce répertoire. Utilisez le symbole de redirection >> pour ajouter le contenu au lieu de l'écraser. Cela vous permettra d'ajouter des clés sans détruire les clés ajoutées précédemment.
La commande complète s'affiche comme suit :
- 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 pourriez recevoir le message suivant :
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 ENTRER pour continuer.
Ensuite, vous devriez être invité à entrer le mot de passe du compte utilisateur distant :
username@203.0.113.1'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 été réussi.
Copie manuelle de la clé publique
Si vous n'avez pas accès SSH avec mot de passe à votre serveur, vous devrez compléter le processus manuellement.
Cette section décrit comment 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 id_rsa.pub, exécutez la commande suivante sur votre ordinateur local :
- cat ~/.ssh/id_rsa.pub
Ceci renverra le contenu de la clé dans la sortie de la commande :
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle7Q+bqgZ8SeeM8wzytsY+dVGcBxF6N4JS+zVk5eMcV385gG3Y6ON3EG112n6d+SMXY0OEBIcO6x+PnUSGHrSgpBgX7Ks1r7xqFa7heJLLt2wWwkARptX7udSq05paBhcpB0pHtA1Rfz3K2B+ZVIpSDfki9UVKzT8JUmwW6NNzSgxUfQHGwnW7kj4jp4AT0VZk3ADw497M2G/12N0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE+ZHDSCuURNsAInVzgYo9xgJDW8wUw2o8U77+xiFxgI5QSZX3Iq7YLMgeksaO4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL/zkOhvJCACK6Vb15mDOeCSq54Cr7kvS46itMosi/uS66+PujOO+xt/2FWYepz6ZlN70bRly57Q06J+ZJoc9FfBCbCyYH7U/ASsmY095ywPsBo1XQ9PqhnN1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWhcrRf4G2fJLRcGUr9q8/lERo9oxRm5JFX6TCmj6kmiFqv+Ow9gI0x8GvaQ== demo@test
Accédez à votre hôte distant en utilisant la méthode de votre choix.
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
Vous pouvez maintenant 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. Pour cette commande, 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. Cela devrait commencer par ssh-rsa AAAA...:
- echo public_key_string >> ~/.ssh/authorized_keys
Enfin, assurez-vous que le répertoire ~/.ssh et le fichier authorized_keys ont les permissions appropriées définies :
- chmod -R go= ~/.ssh
Cela supprime récursivement tous les droits d'accès « 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. Dans ce tutoriel, notre utilisateur s'appelle sammy, mais vous devez remplacer par le nom d'utilisateur approprié dans la commande suivante :
- chown -R sammy:sammy ~/.ssh
Maintenant, vous pouvez essayer l'authentification sans mot de passe avec votre serveur Ubuntu.
Étape 3 — Authentification au serveur Ubuntu en utilisant des clés SSH
Si vous avez réussi à terminer l'une des procédures de l'étape 2, vous devriez être en mesure de vous connecter à l'hôte distant sans le mot de passe du compte distant.
Le processus est le même :
- ssh username@remote_host
Si c'est la première fois que vous vous connectez à cet hôte (si vous avez utilisé la méthode manuelle), vous pouvez recevoir quelque chose comme ceci :
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. Écrivez « oui » puis appuyez sur ENTRÉE 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 lors de la création de la clé, vous serez invité à la saisir (notez que vos frappes ne s'afficheront pas dans la session du terminal pour des raisons de sécurité). Après authentification, une nouvelle session de shell devrait s'ouvrir pour vous avec le compte configuré sur le serveur Ubuntu.
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.
É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 réussi à configurer l'authentification par 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 compléter les étapes de cette section, assurez-vous que vous avez soit une authentification basée sur une clé SSH configurée pour le compte root sur ce serveur, ou de préférence, que vous avez une authentification basée sur une clé SSH configurée pour un compte non-root sur ce serveur avec des privilèges sudo. Cette étape va restreindre les connexions basées sur mot de passe, garantissant que vous pourrez toujours obtenir un accès administratif, ce qui est crucial.
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, soit avec un compte ayant 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. Cela peut être commenté avec un # au début de la ligne. Décommentez la ligne en supprimant le #, et réglez la valeur sur no. Cela désactivera votre capacité à vous connecter via SSH en utilisant des mots de passe de compte :
...
PasswordAuthentication no
...
Enregistrez et fermez le fichier lorsque vous avez terminé en appuyant sur CTRL + X, puis Y et ENTER pour quitter nano. Pour activer ces modifications, vous devez redémarrer le service sshd:
- sudo systemctl restart ssh
Par précaution, ouvrez une nouvelle fenêtre de terminal et testez que le service SSH fonctionne correctement avant de fermer la session en cours :
- ssh username@remote_host
Une fois que vous avez vérifié que votre service SSH fonctionne correctement, vous pouvez en toute sécurité fermer toutes les sessions serveur actuelles.
Le démon SSH de votre serveur Ubuntu ne répond désormais qu'à l'authentification par clé SSH et l'authentification par mot de passe a été désactivée.
Conclusion
Vous devriez maintenant avoir configuré l'authentification basée sur des 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 l'utilisation de SSH, consultez notre Guide des essentiels SSH.