Mettre en œuvre l’authentification par clé SSH sous Linux
SSH (Secured Shell) est un protocole qui crée une connexion cryptographiquement sécurisée entre le client SSH et les serveurs distants.
Grâce à SSH, vous pouvez gérer et administrer des serveurs distants en toute sécurité. Cela peut s’avérer utile à bien des égards.
- Déploiement de plusieurs serveurs
- Arrêter/démarrer des services à distance
- Automatisation
et toute votre créativité (espérons-le)…
En tant qu’administrateur système, il s’agit là d’informations de base à connaître.
Voyons comment…
Je vais générer une clé privée et une clé publique. La clé privée doit être stockée sur la machine de votre client ssh et doit être conservée en toute sécurité. La clé publique doit être copiée sur le serveur distant pour que vous puissiez vous connecter à ce serveur à partir de la machine client SSH sans mot de passe.
Vous apprendrez ce qui suit.
- Installer SSH (non requis si déjà installé)
- Générer des clés SSH
- Copier la clé SSH sur un serveur distant
- Se connecter au serveur distant à l’aide de SSH
Pour la démonstration, j’ai 2 serveurs avec les adresses IP ci-dessous, un système est un client et l’autre est un serveur sur lequel je me connecterai par ssh depuis une machine cliente.
- Client (utilisateur -> geekflare) : 192.168.56.102
- Remote (utilisateur -> ubuntu) : 192.168.56.101
Installation de SSH
Avant de suivre les étapes mentionnées dans cet article, assurez-vous que openssh-server
est installé sur les serveurs. S’il n’est pas installé, exécutez les commandes ci-dessous pour l’installer.
sudo apt-get install openssh-server
sudo systemctl enable ssh
sudo systemctl start ssh
Vous pouvez lancer la commande ssh pour vérifier si elle est installée sur le système ou non.
geekflare@geekflare:~$ ssh
utilisation : ssh [-46AaCfGgKkMNqsTtVvXxYy] [-B bind_interface]
[-b bind_address] [-c cipher_spec] [-D [bind_address :]port]
[-E fichier_journal] [-e escape_char] [-F fichier_config] [-I pkcs11]
[-i fichier_identité] [-J [utilisateur@]hôte[:port]] [-L adresse] [-J [utilisateur@]hôte[:port]] [-J [utilisateur@]hôte[:port]] [-L adresse]
[-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port]
[-Q query_option] [-R address] [-S ctl_path] [-W host:port]
[-w local_tun[:remote_tun]] destination [commande]
Générer des clés SSH
Cette opération doit être effectuée sur un serveur client.
Exécutez la commande ssh-keygen
pour générer une clé SSH. Appuyez simplement sur la touche “Entrée” lorsqu’on vous demande le fichier, la phrase de passe et la même phrase de passe. Par défaut, la commande génère une paire de clés dans le répertoire ~/.ssh. Id_rsa est la clé privée et id_rsa.pub est la clé publique associée.
geekflare@geekflare:~$ ssh-keygen
Génération d'une paire de clés rsa publique/privée.
Entrez le fichier dans lequel vous souhaitez sauvegarder la clé (/home/geekflare/.ssh/id_rsa) :
Saisissez la phrase d'authentification (vide pour aucune phrase d'authentification) :
Saisissez à nouveau la même phrase de passe :
Votre identification a été sauvegardée dans /home/geekflare/.ssh/id_rsa.
Votre clé publique a été sauvegardée dans /home/geekflare/.ssh/id_rsa.pub.
L'empreinte de la clé est :
SHA256:3XDm62tzJegGm8oAmFYCyeFZovJOuU42zNgyn9GzH30 geekflare@geekflare
L'image aléatoire de la clé est :
---[RSA 2048]----
|o .. |
| o |
|oo. . . o |
|.. * . * |
| B . S . o. |
| O o . . . ... .|
| @ o o . E=. o |
| B o .o.=
| ... o. oo |
----[SHA256]-----
Deux nouveaux fichiers seront générés dans le répertoire ~/.ssh.
Copier la clé SSH sur le serveur distant
La clé privée doit être copiée dans le dossier ~/.ssh
sur un serveur distant. La plupart des serveurs devraient déjà avoir ce dossier, sinon vous devez le créer.
Pour ce faire, procédez comme suit
- Connectez-vous au serveur distant avec l’utilisateur auquel vous souhaitez vous connecter. Dans mon cas, il s’agit d’
ubuntu
- Assurez-vous que le répertoire de travail actuel est le répertoire personnel de l’utilisateur, puis créez un dossier .ssh. Vous pouvez également utiliser la commande suivante pour en créer un
mkdir -p ~/.ssh
Si vous avez déjà un dossier .ssh, faites-en une sauvegarde.
Ensuite, poussons la clé publique à partir d’un serveur client.
Sur la machine cliente (192.168.56.102), exécutez la commande ci-dessous pour copier la clé publique sur le serveur distant à l’intérieur d’un fichier authorized_keys
dans le répertoire .ssh.
geekflare@geekflare:~$ cat .ssh/id_rsa.pub | ssh ubuntu@192.168.56.101 'cat >> .ssh/authorized_keys'
ubuntu@192.168.56.101's password:
Exécutez la commande ci-dessous pour définir les autorisations sur le fichier authorized_keys sur le serveur distant.
geekflare@geekflare:~$ ssh ubuntu@192.168.56.101 "chmod 700 .ssh ; chmod 640 .ssh/authorized_keys"
Très bien, la clé de conclusion est échangée et les permissions sont définies.
Connectez-vous au serveur distant à l’aide de SSH
Testons pour voir si cela fonctionne !
Connectons-nous au serveur distant (192.168.56.101) depuis une machine cliente (192.168.56.102) en tant qu’utilisateur geekflare.
Exécutez la commande ci-dessous pour tester, il ne vous demandera pas de mot de passe cette fois.
geekflare@geekflare:~$ ssh ubuntu@192.168.56.101
Bienvenue sur Ubuntu 16.04.6 LTS (GNU/Linux 4.4.0-151-generic i686)
* Documentation : https://help.ubuntu.com
* Gestion : https://landscape.canonical.com
* Support : https://ubuntu.com/advantage
346 paquets peuvent être mis à jour.
11 mises à jour sont des mises à jour de sécurité.
Dernière connexion : Mon Jun 17 00:10:32 2019 from 192.168.56.101
Et voilà…
Je me suis connecté au serveur distant avec succès. L’exécution de la commande ci-dessous vous donnera les détails de l’IP de la machine distante.
ubuntu@ubuntu:~$ ifconfig
enp0s3 Link encap:Ethernet HWaddr 08:00:27:9b:47:86
inet addr:10.0.2.15 Bcast:10.0.2.255 Mask:255.255.255.0
inet6 addr : fe80::5c62:3267:b752:fe5d/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:20239 errors:0 dropped:0 overruns:0 frame:0
Paquets TX:5406 erreurs:0 abandonnées:0 dépassements:0 porteuse:0
collisions:0 txqueuelen:1000
RX bytes:22678039 (22.6 MB) TX bytes:701710 (701.7 KB)
enp0s8 Link encap:Ethernet HWaddr 08:00:27:a9:4a:6b
inet addr:192.168.56.101 Bcast:192.168.56.255 Mask:255.255.255.0
inet6 addr : fe80::54a9:761c:9034:21a2/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:330 errors:0 dropped:0 overruns:0 frame:0
Paquets TX:197 erreurs:0 abandonnées:0 dépassements:0 porteuse:0
collisions:0 txqueuelen:1000
RX bytes:42847 (42.8 KB) TX bytes:32774 (32.7 KB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
adresse inet6 : ::1/128 Portée : Hôte
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:997 errors:0 dropped:0 overruns:0 frame:0
Paquets TX:997 erreurs:0 abandonnées:0 dépassements:0 porteuse:0
collisions:0 txqueuelen:1
RX bytes:79654 (79.6 KB) TX bytes:79654 (79.6 KB)
Conclusion
La mise en place de l’échange de clés SSH est très simple comme vous pouvez le constater. J’espère que cela vous a aidé et que vous êtes intéressé par l’apprentissage de l’administration et du dépannage de Linux, alors consultez ce cours Udemy.