Comment configurer les clés SSH sur Debian 9

introduction

SSH, ou shell sécurisé, est un protocole crypté utilisé pour administrer et communiquer avec les serveurs. Lorsque vous travaillez avec un serveur Debian, il y a de fortes chances que vous passiez le plus clair de votre temps dans une session de terminal connectée à votre serveur via SSH.

Dans ce guide, nous allons nous concentrer sur la configuration de clés SSH pour une installation vanille de Debian 9. Les clés SSH constituent un moyen simple et sécurisé de se connecter à votre serveur et sont recommandées pour tous les utilisateurs.

Étape 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 l’indicateur + -b 4096 + pour créer une clé plus grande de 4096 bits) .

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

OutputGenerating public/private rsa key pair.
Enter file in which to save the key (//.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, l’invite suivante peut s’afficher:

Output/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. Faites très attention 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 secrète sécurisée, ce qui est vivement recommandé. Une phrase secrète 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 SSH Authentification par clé sur un serveur Linux.

Vous devriez alors voir le résultat suivant:

OutputYour identification has been saved in //.ssh/id_rsa.
Your public key has been saved in //.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 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 une clé SSH pour vous connecter.

Étape 2 - Copiez la clé publique sur le serveur Debian

Le moyen le plus rapide de copier votre clé publique sur l’hôte Debian 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 ne disposez pas de + ssh-copy-id + sur votre ordinateur client, vous pouvez utiliser l’une des deux méthodes alternatives décrites dans cette section (copie via SSH basée sur un mot de passe ou copie manuelle de la clé).

Copier une 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 le disposer sur votre système local. 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’utilitaire, vous devez simplement spécifier l’hôte distant auquel vous souhaitez vous connecter et le compte d’utilisateur auquel vous avez accès par mot de passe SSH. C’est le compte sur lequel votre clé publique SSH sera copiée.

La syntaxe est la suivante:

ssh-copy-id @

Vous pouvez voir le message suivant:

OutputThe authenticity of host ' ()' 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)?

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 à la recherche de 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
@'s password:

Tapez le mot de passe (votre saisie ne sera pas affichée pour des raisons de sécurité) et appuyez sur les touches + 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 du répertoire personnel du compte distant + ~ / .ssh + appelé + registered_keys +.

Vous devriez voir la sortie suivante:

OutputNumber of key(s) added: 1

Now try logging into the machine, with:   "ssh '@'"
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 continuer sur https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys-on-debian-9#step-3-%E2%80%94-authenticate- to-debian-server-using-ssh-keys [Étape 3].

Copier une clé publique à l’aide de SSH

Si vous ne disposez pas de + ssh-copy-id +, 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 à l’aide d’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 en le canalisant via une connexion SSH au serveur distant.

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

Nous pouvons ensuite sortir le contenu que nous avons transféré dans un fichier nommé + registered_keys + dans ce répertoire. Nous allons utiliser 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 @ "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 ' ()' 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)?

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

Output@'s password:

Après avoir entré votre mot de passe, le contenu de votre clé + id_rsa.pub + sera copié à la fin du fichier + allowed_keys + du compte de l’utilisateur distant. Continuez sur https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys-on-debian-9#step-3-%E2%80%94-authenticate-to- serveur debian-using-ssh-keys [Étape 3] si cela a réussi.

Copier la clé publique manuellement

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

Nous ajouterons manuellement le contenu de votre fichier + id_rsa.pub + au fichier + ~ / .ssh / registered_keys + de votre machine distante.

Pour afficher le contenu de votre clé + id_rsa.pub +, tapez ceci sur 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== demo@test

Accédez à votre hôte distant en utilisant la méthode disponible.

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 + allowed_keys + dans ce répertoire. Vous pouvez ajouter le contenu de votre fichier + id_rsa.pub + à la fin du fichier + allowed_keys +, en le créant si nécessaire à l’aide de la commande suivante:

echo  >> ~/.ssh/authorized_keys

Dans la commande ci-dessus, remplacez le ++ par le résultat 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 veillerons à ce que les droits appropriés soient accordés aux répertoires + ~ / .ssh + et + registered_keys +:

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 des clés pour un compte utilisateur, il est également important que le répertoire + ~ / .ssh + appartienne à l’utilisateur et non à + ​​root +:

chown -R : ~/.ssh

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

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

Étape 3 - Authentification sur le serveur Debian à 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 le mot de passe du compte distant.

Le processus de base est le même:

ssh @

Si vous vous connectez pour la première fois à cet hôte (si vous avez utilisé la dernière méthode ci-dessus), vous verrez peut-être quelque chose comme ceci:

OutputThe authenticity of host ' ()' 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)?

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 secrète pour la clé privée lors de la création de la clé, vous serez invité à la saisir maintenant (notez que vos séquences de touches ne s’afficheront pas dans la session de terminal pour des raisons de sécurité). Après authentification, une nouvelle session shell doit s’ouvrir avec le compte configuré sur le serveur Debian.

Si l’authentification par 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 pouviez vous connecter à votre compte à l’aide de SSH sans mot de passe, vous avez correctement configuré l’authentification par clé SSH sur votre compte. Cependant, votre mécanisme d’authentification par mot de passe est toujours actif, ce qui signifie que votre serveur est toujours exposé à des attaques par force brute.

Avant de terminer les étapes de cette section, assurez-vous que l’authentification basée sur une clé SSH est configurée pour le compte root de ce serveur ou, de préférence, que l’authentification basée sur une clé SSH est configurée pour un compte non root sur ce serveur. serveur avec les privilèges + sudo +. Cette étape verrouille les connexions à l’aide de mots de passe. Il est donc essentiel de pouvoir continuer à obtenir un accès administrateur.

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, en tant que root ou avec un compte doté 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é. Décommentez la ligne et définissez la valeur sur «non». Cela désactivera votre capacité à vous connecter via SSH à l’aide de mots de passe de compte:

/ etc / ssh / sshd_config

...
PasswordAuthentication no
...

Sauvegardez et fermez le fichier lorsque vous avez terminé en appuyant sur + CTRL + + + + X + , puis + Y + pour confirmer l’enregistrement du fichier, et enfin + ENTER + pour quitter nano. Pour réellement implémenter ces changements, nous devons redémarrer le service `+ sshd +:

sudo systemctl restart ssh

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

ssh @

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

Le démon SSH de votre serveur Debian ne répond plus qu’aux clés SSH. L’authentification par mot de passe a été désactivée avec succès.

Conclusion

Une authentification basée sur une clé SSH doit maintenant être configurée sur votre serveur, ce qui vous permet de vous connecter sans fournir de mot de passe pour votre compte.

Si vous souhaitez en savoir plus sur l’utilisation de SSH, consultez notre https://www.digitalocean.com/community/tutorials/ssh-essentials-working-with-ssh-servers-clients-and-keys [ Guide SSH Essentials].