La première étape de la configuration des clés SSH consiste à créer une paire de clés sur la machine cliente (généralement sur un ordinateur) :
$ ssh-keygen
Pour commencer, le ssh-keygen créera une paire de clés RSA de 2048 bits, ce qui sera suffisamment sécurisé pour la plupart des cas d'utilisation.
En guise d'alternative, 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 pouvoir voir l’invite suivante :
Output 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 dans un chemin alternatif personnalisé. L'invite suivante devrait apparaître :
Output Enter passphrase ( leave empty for no passphrase):
Vous pouvez également saisir une phrase secrète sécurisée, ce qui est fortement recommandé. Une phrase secrète renforce la sécurité et empêche les utilisateurs non autorisés de se connecter. Pour en savoir plus sur la sécurité, consultez notre tutoriel « Configurer l'authentification par clé SSH sur un serveur Linux ».
Vous devriez alors voir le résultat 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 devriez maintenant disposer d'une clé publique et d'une clé privée pour vous authentifier. L'étape suivante consiste à placer la clé publique sur votre serveur afin de pouvoir utiliser l'authentification par clé SSH pour vous connecter.
Le moyen le plus rapide de copier votre clé publique sur l'hôte Ubuntu est d'utiliser l'utilitaire 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 proposées dans cette section (copie via SSH avec mot de passe ou copie manuelle de la clé).
L'outil ssh-copy-id est inclus par défaut dans de nombreux systèmes d'exploitation ; il est peut-être disponible sur votre système local. Pour fonctionner, vous devez disposer d'un accès SSH à votre serveur par mot de passe. Pour utiliser cet utilitaire, vous devez spécifier l'hôte distant auquel vous souhaitez vous connecter et ajouter le compte utilisateur auquel vous avez accès par mot de passe SSH. Ce compte sera celui vers lequel votre clé SSH publique sera copiée.
La syntaxe est :
$ ssh-copy-id username@remote_host
Vous pouvez voir le message suivant :
Output The authenticity of host '111.111.11.111 (111.111.11.111)' 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 n'a pas reconnu l'hôte distant. Cela se produit probablement lors de votre première connexion à un nouvel hôte. Saisissez « oui » et appuyez sur ENTRÉE pour continuer.
L'utilitaire analysera ensuite votre compte local à la recherche de la clé id_rsa.pub créée précédemment. Une fois la clé trouvée, 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@111.111.11.111's password:
Saisissez le mot de passe (notez que votre saisie ne sera pas affichée pour des raisons de sécurité) et appuyez sur ENTRÉE. L'utilitaire se connectera au compte sur l'hôte distant avec le mot de passe fourni. Il copiera ensuite le contenu de votre clé ~/.ssh/id_rsa.pub dans un fichier intitulé authorized_keys, situé dans le répertoire personnel ~/.ssh du compte distant.
Après cela, vous devriez voir le résultat suivant :
Output Number of key(s) added: 1 Logging into the machine, with: "ssh 'username@111.111.11.111'" and check to make sure that only the key you wanted was added.
À ce stade du processus, votre clé id_rsa.pub a été téléchargée sur le compte distant.
Si vous n'avez pas le ssh-copy-id disponible, 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.
Pour ce faire, nous utilisons la commande cat pour lire le contenu de la clé SSH publique sur notre ordinateur local et le rediriger vers le serveur distant via une connexion SSH. De l'autre côté, nous pouvons vérifier que le répertoire ~/.ssh existe sous le compte utilisé, puis exporter le contenu redirigé vers un fichier nommé 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 celles déjà ajoutées.
La commande complète ressemble à ceci :
cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
Vous pouvez voir le message suivant :
Output The authenticity of host '111.111.11.111 (111.111.11.111)' 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 lors de votre première connexion à un nouvel hôte. Saisissez « oui » et appuyez sur ENTRÉE pour continuer.
Ensuite, vous devriez être invité à saisir le mot de passe du compte utilisateur distant :
Output username@111.111.11.111'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 l'opération a réussi.
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 sur votre machine distante.
Pour afficher le contenu de votre clé id_rsa.pub, saisissez ceci sur votre ordinateur local :
cat ~/.ssh/id_rsa.pub
Vous verrez le contenu de la clé, qui devrait ressembler à ceci :
Output ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle 7Q+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 dont vous disposez.
Une fois que vous avez accès à votre compte sur le serveur distant, assurez-vous que le répertoire ~/.ssh existe. La commande créera le répertoire si nécessaire, ou n'aura aucune action 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, à l'aide de la commande suivante :
Dans la commande suivante, remplacez la chaîne de clé publique par le résultat de la commande cat ~/.ssh/id_rsa.pub exécutée sur votre système local. Elle doit commencer par ssh-rsa AAAA....
echo public_key_string >> ~/.ssh/authorized_keys
Nous pouvons maintenant essayer d’accéder à notre serveur Ubuntu avec une authentification sans mot de passe.
Si vous avez effectué 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 que l’autre fois où nous l’avons utilisé :
$ 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 pouvez voir quelque chose comme ceci :
Output The authenticity of host '111.111.11.111 (111.111.11.111)' 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
Si cela se produit, cela signifie que votre ordinateur local ne reconnaît pas l'hôte distant. Saisissez « oui » et appuyez sur ENTRÉE 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 secrète lors de sa création, 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 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.
Si vous avez pu vous connecter à votre compte via SSH sans mot de passe, vous avez correctement configuré l'authentification par clé SSH. Cependant, votre mécanisme d'authentification par mot de passe est toujours actif, ce qui signifie que votre serveur reste exposé aux attaques par force brute.
Avant de suivre les étapes de cette section, assurez-vous que l'authentification par clé SSH est configurée pour le compte root sur ce serveur ou, idéalement, pour un compte non root disposant des privilèges sudo. Cette étape verrouillera les connexions par mot de passe ; il est donc crucial de garantir un accès administrateur.
Une fois que vous avez confirmé que votre compte distant dispose des privilèges d'administrateur, connectez-vous à votre serveur distant avec des clés SSH, soit en tant que root, soit avec un compte disposant des privilèges sudo. Ouvrez ensuite le fichier de configuration du démon SSH :
sudo nano /etc/ssh/sshd_config
Dans le fichier, recherchez une directive appelée PasswordAuthentication. Elle peut être commentée. Décommentez la ligne et définissez la valeur sur « no ». Cela désactivera votre connexion SSH avec les mots de passe de compte :
/etc/ssh/sshd_config ... PasswordAuthentication no ...
Enregistrez et fermez le fichier une fois terminé en appuyant sur Ctrl + X, puis sur Y pour confirmer l'enregistrement, et enfin sur Entrée pour quitter nano. Pour appliquer 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 que le service SSH fonctionne correctement avant de fermer cette session :
$ ssh username@remote_host
Une fois que vous avez vérifié votre service SSH, vous pouvez fermer en toute sécurité toutes les sessions de serveur en cours.
Le démon SSH de votre serveur Ubuntu ne répond désormais qu'aux clés SSH. L'authentification par mot de passe a été désactivée.
Une fois le didacticiel terminé, vous devriez maintenant avoir configuré l'authentification basée sur une clé SSH sur votre serveur, ce qui vous permet de vous connecter sans fournir de mot de passe de compte.