Implémenter l'authentification basée sur les clés SSH sur Linux
SSH (Secured Shell) est un protocole qui crée une connexion sécurisée par cryptographie entre le client SSH et les serveurs distants.
En utilisant SSH, vous pouvez gérer et administrer des serveurs distants en toute sécurité. Cela peut être utile de plusieurs manières.
- Déploiement multi-serveurs
- Arrêter / démarrer les services à distance
- Créateur
et toute votre créativité (espérons-le)…
En tant qu'administrateur système, ce sont des informations de base à connaître.
Apprenons comment…
Je vais générer une clé privée et une clé publique. La clé privée doit être stockée sur votre machine client ssh et doit être gardée sécurisée. La clé publique doit être copiée sur le serveur distant pour se connecter à ce serveur à partir de la machine client SSH sans mot de passe requis.
Vous apprendrez ce qui suit.
- Installez SSH (non requis si déjà installé)
- Générer des clés SSH
- Copier la clé SSH sur un serveur distant
- Connectez-vous au serveur distant en utilisant SSH
À des fins de démonstration, j'ai 2 serveurs avec des 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
- À distance (utilisateur -> ubuntu): 192.168.56.101
Installing SSH
Avant de suivre les étapes mentionnées dans cet article, assurez-vous 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
usage: ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-B bind_interface]
[-b bind_address] [-c cipher_spec] [-D [bind_address:]port]
[-E log_file] [-e escape_char] [-F configfile] [-I pkcs11]
[-i identity_file] [-J [user@]host[:port]] [-L address]
[-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 [command]
Generate SSH Keys
Cela doit être fait sur un serveur client.
Exécutez le ssh-keygen
commande pour générer une clé SSH. Appuyez simplement sur Entrée quand il demande le fichier, la phrase secrète, la même phrase secrète. Il génère une paire de clés dans le répertoire ~ / .ssh par défaut. 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:
Your identification has been saved in /home/geekflare/.ssh/id_rsa.
Your public key has been saved in /home/geekflare/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:3XDm62tzJegGm8oAmFYCyeFZovJOuU42zNgyn9GzH30 geekflare@geekflare
The key's randomart image is:
+---[RSA 2048]----+
|o+.. |
|+o+ |
|oo. . . o |
|.. * . * |
| B . S . o. |
| O o . . . ... .|
|+ @ o o . E=. o |
| B + o + .o.= . |
| + ... o. oo+ |
+----[SHA256]-----+
Il générera deux nouveaux fichiers dans ~/.ssh
répertoire.
Copy SSH Key to Remote Server
La clé privée doit être copiée ~/.ssh
dossier sur un serveur distant. La plupart des serveurs devraient déjà avoir ce dossier sinon, vous devez créer un dossier.
Et, pour ce faire:
- Connectez-vous au serveur distant avec l'utilisateur que vous souhaitez connecter. Dans mon cas, c'est
ubuntu
- Assurez-vous que le répertoire de travail actuel est le répertoire de base de l'utilisateur, puis créez un dossier .ssh. Vous pouvez également utiliser la commande unique suivante pour en créer un
mkdir -p ~/.ssh
Si vous avez déjà un dossier .ssh, effectuez une sauvegarde de celui-ci.
Ensuite, poussons la clé publique à partir d'un serveur client.
Sur l'ordinateur client (192.168.56.102), exécutez la commande ci-dessous pour copier la clé publique sur le serveur distant à l'intérieur d'un authorized_keys
fichier 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"
Super, cela conclut que la clé est échangée et que l'autorisation est définie.
Login to Remote Server using 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, elle ne demandera pas de mot de passe cette fois.
geekflare@geekflare:~$ ssh ubuntu@192.168.56.101
Welcome to Ubuntu 16.04.6 LTS (GNU/Linux 4.4.0-151-generic i686)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
346 packages can be updated.
11 updates are security updates.
Last login: Mon Jun 17 00:10:32 2019 from 192.168.56.101
Voici…
Je me suis connecté avec succès au serveur distant. L'exécution de la commande ci-dessous donnera les détails 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) TX bytes:79654 (79.6 KB)
Conclusion
La configuration de l'échange de clés SSH est très simple, comme vous pouvez le voir. J'espère que cela vous aidera et que vous êtes intéressé par l'apprentissage de l'administration et du dépannage Linux, alors consultez ceci Cours Udemy.