date: 12 Oct 2009 title: Home serveur : utilisation de clés pour SSH tags: agent, athentification, clé publique, home serveur, planet-libre, ssh categories: Configuration d'un home serveur, GNU-Linux et Logiciels Libres OpenSSH supporte plusieurs types d'authentifications : mots de passe, clés publiques, en fonction de l'hôte, ... Nous allons ici voir l'authentification par clés publiques. Si vous n'êtes pas trop à l'aise avec la notion de clé publique / clé privée, vous pouvez aller jeter un oeil sur Wikipédia Jusqu'à indication contraire, les commandes ci dessous sont à exécuter sur votre ordinateur, pas sur le serveur. Avant tous, pour plus de commodité, éditez le fichier /etc/ssh/ssh_config (le client ssh). On va préciser une bonne fois pour toute le port de votre serveur, car jusqu'à présent, vous deviez taper :
ssh -p3030 
Rajoutez ces 2 lignes dans le fichier, avant la ligne Host * :
Host 192.168.0.10
    Port 3030
Adaptez bien sûr à votre situation l'IP et le port. Maintenant, votre client ssh sait qu'il faut utiliser le port 3030 pour se connecter à votre serveur.

Création du couple de clés

On va commencer par créer une paire de clé (une publique et une privée). La clé privé devra rester en sécurité sur votre ordinateur, tandis qu'on copiera la clé publique sur le serveur.
ssh-keygen
Un mot de passe (passphrase) est alors demandé. Il sert à verrouiller la clé privé. En effet si vous ne mettez pas de mot de passe, n'importe qui qui arrive à se procurer votre clé pourra se connecter au serveur, sans aucune restriction. Il n'est cependant pas rare de ne pas mettre de mot de passe : ça permet de pouvoir exécuter automatiquement (dans un script) des commandes d'administrations à distance (sauvegardes, ...). Mais nous allons remédier à ce problème par la suite. Copiez la clé publique sur votre serveur :
ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.0.10
Répétez éventuellement cette manip sur vos autres PC qui auront accès au serveur SSH. Voila, maintenant si vous essayez de vous connecter, ssh (le client) vous demandera votre mot de passe pour utiliser la clé privé. Notez que plus aucun mot de passe n'est envoyé au serveur. À partir de là, vous pouvez choisir : actuellement, votre serveur ssh accepte les authentifications par mots de passe ou par clés. Si vous ne comptez vous connecter à votre serveur que depuis votre PC, alors vous pouvez désactiver l'authentification par mot de passe sur le serveur (fichier /etc/ssh/sshd_config) :
PasswordAuthentication no
Par contre si vous vous baladez entre plusieurs ordinateurs «publics», vous avez aussi la possibilité de mettre votre clé privé sur une clé USB (on voit bien l'intérêt de mettre un mot de passe dessus dans ces cas là). À vous de voir donc.

Utilisation de l'agent ssh

L'agent ssh va nous permettre de ne pas taper le mot de passe protégeant la clé à chaque connection. C'est un démon qui se lance sur votre ordinateur. Au lancement il va vous demander votre mot de passe pour dévérouiller, et la gardera dévérouillée tout au long de votre session. Les programmes tel que ssh, scp, votre explorateur de fichier si il supporte le protocole sftp, ... passerons par l'agent pour obtenir la clé privé dévérouillée. Pratique non ? Pour que ça marche, il faut lui indiquer l'emplacement de votre clé :
ssh-add
Il la trouvera tous seul comme un grand si vous l'avez pas déplacé ou renommé. Donnez votre mot de passe pour la dernière fois. Enfin vous pouvez lancer ssh-agent :
ssh-agent
Suivant votre distribution / OS, vous pouvez ajouter le programme ssh-agent pour qu'il se lance au démarrage de votre session.