jeudi 25 septembre 2008

clé publique/privée: ssh et scp sans mot de passe

Si vous utilisez souvent les commandes ssh, scp ou rsync entre deux machines, il y a moyen de supprimer la demande de mot de passe. Cela ne détériore pas trop la sécurité, puisque la manip ne concerne que la liaison entre 2 machines spécifiques (et dans un seul sens), et uniquement sous votre login.

Pour cela, il suffit de générer un jeu de clé ssh publique/privée sur la machine appelante machine1 avec l'instruction suivante (en gras, exemple sous un utilisateur user) :

machine1:~ user$ ssh-keygen -t rsa
Enter file in which to save the key (~/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in ~/.ssh/id_rsa.
Your public key has been saved in ~/.ssh/id_rsa.pub.
The key fingerprint is:
...
en tapant ENTER à chaque question pour ne pas entrer de passphrase. Ensuite, il faut ajouter le contenu du fichier créé id_rsa.pub dans le fichier .ssh/authorized_key2 (à créer s'il n'existe pas) de la machine machine2:

machine1:~user$ scp .ssh/id_rsa.pub machine2:
user@machine2's password:
machine1:~user$
ssh machine2
user@machine2's password:
machine2:~user$
mkdir .ssh
machine2:~user$ chmod 700 .ssh
machine2:~user$
cat id_rsa.pub >> .ssh/authorized_keys
machine2:~user$ chmod 600 .ssh/
authorized_keys
machine2:~user$
logout
et voilà! Maintenant, si vous faites:

machine1:~ user$ ssh machine2
ou un scp, rsync ou toute autre commande utilisant le protocole secure shell, il ne vous demandera plus votre mot de passe. Si toutefois un mot de passe vous était toujours demandé, il est possible que ce soit lié à un problème de droits sur le répertoire user de la machine2. Auquel cas vous devrez faire, avec des droits root:

machine2:# chmod go-w /home/user

À propos des clés publiques/privées

Lorsqu'un informaticien m'a expliqué comment fonctionnait le système d'authentification par clés ssh, j'ai compris que l'analogie terminologique n'était pas adaptée: la clé dite privée est un cryptage de votre mot de passe et correspond bien à une clé virtuelle. Mais la clé dite publique est une sorte d'empreinte permettant de vérifier que vous êtes bien propriétaire de la clé privée, c'est donc plus une serrure ou un cadenas qu'une clé! En effet vous pouvez installer ou donner votre « clé publique » sur des machines distantes sans aucun risque, car c'est comme si vous distribuiez des cadenas ou des serrures uniques que vous auriez fabriqués vous-même. En revanche, vous êtes le seul à détenir la clé pour les ouvrir; et si quelqu'un vous la prenait, il pourrait ouvrir toutes les serrures que vous avez placées.

Plutôt que d'un système clé publique/privée (public/private key), il serait donc plus juste de parler, par analogie, d'un système de clé/cadenas (key/padlock).

1 commentaire:

Anonyme a dit…

coooooooooool merci!