Comment configurer les clés SSH sur Ubuntu 16.04

Introduction

SSH, également appelé Secure Shell, est un protocole chiffré généralement utilisé pour administrer et communiquer avec les serveurs. Ce tutoriel porte principalement sur la configuration des clés SSH pour Ubuntu 16.04. Les clés SSH sont recommandées pour tous les utilisateurs et offrent un moyen simple et sécurisé de se connecter à votre serveur.

Étape 1 — Créer la paire de clés RSA

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.


Étape 2 — Copie de la clé publique sur le serveur Ubuntu


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é).


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

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

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.

Copie manuelle de la clé publique

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.

Étape 3 — Authentification auprès du serveur Ubuntu à l'aide de clés SSH

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.


Étape 4 — Désactivez l'authentification par mot de passe sur votre serveur

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.


Conclusion


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.