Un processus plus sécuritaire est l'utilisation de clés assymétriques (publique/privée).
Le processus est relativement simple.
1- Machine locale : Créer une clé privée et une clé publique
2- Serveur Web/distant : Lui fournir la clé publique et la placer dans sa liste de "clés autorisées"
Ainsi, lors d'une communication SSH, le serveur distant fournira un message encrypté avec la clé publique à la machine locale. Si la machine locale est capable de décrypter le message en utilisant la clé privée, alors c'est que l'authentification est valide.
Évidemment, si la clé privée est volée, celui qui la possèdera pourra également se connecter au serveur distant. Il faut donc la garder précieusement !
Donc, sans plus tarder, voici les étapes à suivre :
1- Création des clés
Sur la machine locale, faire:
[usr@machine]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/usr/.ssh/id_rsa): Appuyer sur <Enter>
passphrase (empty for no passphrase): Appuyer sur <Enter> ou définir une passphrase
Enter same passphrase again: Appuyer sur <Enter> ou réécrire une passphrase
Your identification has been saved in id_rsa.
Your public key has been saved in id_rsa.pub.
The key fingerprint is: 3d:15:66:f0:02:31:ca:0d:c5:d6:98:8b:64:07:ed:94 usr@machine
La clé publique et la clé privée sont maintenant créées.Generating public/private rsa key pair.
Enter file in which to save the key (/home/usr/.ssh/id_rsa): Appuyer sur <Enter>
passphrase (empty for no passphrase): Appuyer sur <Enter> ou définir une passphrase
Enter same passphrase again: Appuyer sur <Enter> ou réécrire une passphrase
Your identification has been saved in id_rsa.
Your public key has been saved in id_rsa.pub.
The key fingerprint is: 3d:15:66:f0:02:31:ca:0d:c5:d6:98:8b:64:07:ed:94 usr@machine
2- Envoyer la clé publique sur le serveur distant
En étant connecté sur la machine locale, il faut aller dans le répertoire où se trouvent les clés.
[usr@machine]$ cd ~/.ssh
Il faut par la suite copier la clé publique sur le serveur distant.
[usr@machine]$ scp id_rsa.pub usr2@serveur.com:/home/usr2/id_rsa.pub
Finalement, il faut aller sur le serveur distant et placer la clé publique comme étant autorisée.
[usr@machine]$ ssh usr2@serveur.com
Fournir le mot de passe habituel
[usr2@serveur]$ cd ~
[usr2@serveur]$ mkdir .ssh
[usr2@serveur]$ cat id_rsa.pub >> .ssh/authorized_keys
[usr2@serveur]$ chmod 700 ~/.ssh
[usr2@serveur]$ chmod 600 ~/.ssh/authorized_keys
La clé est maintenant autorisée par le serveur.Fournir le mot de passe habituel
[usr2@serveur]$ cd ~
[usr2@serveur]$ mkdir .ssh
[usr2@serveur]$ cat id_rsa.pub >> .ssh/authorized_keys
[usr2@serveur]$ chmod 700 ~/.ssh
[usr2@serveur]$ chmod 600 ~/.ssh/authorized_keys
3- Tester le tout
Il ne reste qu'à essayer la connexion SSH de nouveau. Si tout fonctionne, le mot de passe ne sera plus demandé. Par contre, si une "passphrase" a été défini, celle-ci sera demandé.
[usr@machine ~]$ ssh usr2@serveur
L'utilisation de passphrase
Dans le cas où il n'y aurait pas de passphrase de défini, la connexion est instantanée. Cependant, si quelqu'un met la main sur la clé privée de la machine locale, il pourra s'en servir pour se connecter au serveur distant. Pour prévenir cela, c'est une bonne pratique de définir une passphrase. Ainsi, même si quelqu'un réussit à avoir la clé privée, il lui sera impossible de l'utiliser.
Pour éviter que la passphrase soit demandée à chaque utilisation de la clé (connexion SSH), il faut utiliser l'utilitaire ssh-agent.
[usr@machine ~]$ eval `ssh-agent`
Agent pid 8559
[usr@machine ~]$ ssh-add
Entrer la passphrase de la clé privée.
Agent pid 8559
[usr@machine ~]$ ssh-add
Entrer la passphrase de la clé privée.
Empêcher les connexions SSH traditionnelles (n'accepter que la connexion par clé)
Si vous voulez empêcher les connexions par nom d'usager/mot de passe, pour n'accepter que les connexions qui se font par clé SSH, il faut simplement modifier une ligne du fichier /etc/ssh/sshd_config.
PasswordAuthentication no
Redémarrez ensuite le service SSH :
[usr2@serveur]$ service sshd restart (ou systemctl restart ssh.service)
Ajouter votre commentaire