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êt/démarrage de services à distance
- Automatisation
et toute votre créativité (espérons-le) .
En tant qu'administrateur système, il s'agit d'un peu de choses basiques à savoir
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 gardée en 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 vais me connecter via ssh à partir d'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 exécuter 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 [user@]host[:port]] [-L adresse]
[-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port]
[-Q query_option] [-R adresse] [-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
Generating public/private rsa key pair.
Enter file in which to save the key (/home/geekflare/.ssh/id_rsa) :
Enter passphrase (empty for no passphrase) :
Enter same passphrase again :
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:3XDm62tzJegGm8oAmFYCyeFZovJOu42zNgyn9GzH30 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 répertoire ~/.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 permissions 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, cette clé de conclusion est échangée et les autorisations sont toutes définies
Connectez-vous au serveur distant à l'aide de SSH
Testons pour voir si cela fonctionne !
Connectez-vous 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-ci
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. En exécutant la commande ci-dessous, vous obtiendrez 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
TX packets:5406 errors:0 dropped:0 overruns:0 carrier: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
TX packets:197 errors:0 dropped:0 overruns:0 carrier: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
inet6 addr : ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:997 errors:0 dropped:0 overruns:0 frame:0
TX packets:997 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:79654 (79.6 KB) Octets TX: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.
-
Avi est un passionné de technologie avec une expertise dans les technologies en vogue telles que DevOps, Cloud Computing, Big Data et bien d'autres. Il est passionné par l'apprentissage des technologies de pointe et le partage de ses connaissances avec d'autres... en savoir plus