Nous avons vu la mise en place de SSH avec authentification par mot de passe. Le problème du mot de passe, c’est qu’il faut le rentrer à la première connexion (ensuite le système peut s’en rappeler). Pas très pratique si vous voulez que ordinateur établisse tout seul les connexions SSH. En plus de votre présence physique, sa longueur est assez courte pour pouvoir s’en rappeler, ce qu’il rend une attaque par force brute possible. On va donc passer à un système de clés asymétriques longues.
Etape 1: générer ses clés personnelles
Sur la machine cliente A, tapez en console utilisateur $ ssh-keygen
Cela va générer dans ~/.ssh/ votre clé privée id_rsa et votre clé publique id_rsa.pub
Etape 2: copier la clé sur le compte utilisateur du serveur
$ ssh-copy-id toto@ip_du_serveur_B
Cela va vous autoriser à vous connecter à ce compte utilisateur du serveur avec vos clés.
Déja maintenant, en faisant $ ssh toto@ip_de_la_machine_B on peut alors se connecter sans qu’il nous demande de mot de passe.
Etape 3: Ne plus autoriser de connexion par mot de passe
Afin d’être à l’abris d’attaque sur le mot de passe, on peut spécifier que l’authentification par mot de passe ne soit plus autorisée.
Il faut pour cela mettre PasswordAuthentication à no dans le fichier /etc/ssh/sshd_config du serveur. Puis appliquer la modification au service ssh : # service sshd reload
connection -> connexion
Si tu me permets de rajouter quelque chose, une bonne manière de sécuriser un serveur distant tout en laissant le ssh ouvert est même d’interdire la connexion de root par un mot de passe et de n’authoriser QUE l’authentification par clef. Tu peux avoir cette clef sur une clef USB par exemple et ainsi de partout l’avoir sur toi.
Pour interdire qu’un root puisse se connecter par mot de passe, il suffit de modifier /etc/ssh/sshd_config et d’ajouter la ligne :
PermitRootLogin « without-password »
Merci pour ce billet, je viens de mettre ca en place pour mes serveurs est c’est vrai que c’est super pratique :)