Connexion SSH sans mot de passe

Le but est de pouvoir faire dialoguer 2 serveurs par SSH sans avoir besoin de fournir de mot de passe dans des scripts (en clair). L’utilité se fait sentir quand on a besoin de faire des transfert Rsync par exemple.

Le principe est d’utiliser des clefs d’authentification entre les 2 serveurs. La clef privée sur le serveur local (Serv1) et la clef publique sur le serveur distant (Serv2) qui prendra la main sur le premier.

On se connecte sur le serveur (Serv1) où l’on voudra se connecter en SSH, et on génère les clefs SSH.

ssh-keygen -t dsa -b 1024

Pour chaque question, il faut répondre par la touche Entrée jusqu’à la génération de 2 fichiers :

id_dsa : c’est la clef privée qui doit rester sur le serveur à ne jamais transmettre.
id_dsa.pub : c’est la clef publique qui sera transmise à la machine qui veut se connecter (Serv2).

Si la machine n’a jamais reçue de clé publique on prépare le terrain. On se connecte en SSH à la machine distante (Serv2) et on créé le répertoire nécessaire :

ssh root@Serv2
#Donner le mot de passe
mkdir ~/.ssh
chmod 700 ~/.ssh
#Pour retourner sur le serveur (Serv1)
exit

Puis on transfert la clé publique (du Serv1) sur le serveur (Serv2) :

ssh root@192.168.0.Serv1 "echo $(cat ~/.ssh/id_dsa.pub) >> .ssh/authorized_keys"
ssh root@192.168.0.Serv1 "chmod 600 ~/.ssh/authorized_keys"

Maintenant, on peut se connecter automatiquement en SSH depuis le serveur distant (Serv2) :

ssh root@192.168.0.Serv1