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.