15/05/2009

SSH sans mot de passe

Principe du chiffrement asymétriqueAprès avoir vu comment facilement utiliser un tunnel SSH comme proxy pour toutes vos connexions, voilà un moyen simple de ne plus avoir à rentrer son mot de passe lors de la connexion SSH et donc de pouvoir automatiser certaines connexions.

Je n’ai pas trouvé de tutoriel clair et concis en français sur Google alors le voici.

Le principe

Cette astuce ne consiste pas à encoder votre mot de passe en clair quelque part sur votre poste client. Il est basé sur un échange de clés de cryptage RSA entre le serveur et le client.

Principe du chiffrement asymétrique

Le cryptage RSA repose sur une paire de clés : une publique et une privée. Vous l’aurez compris, la clé privée reste sur votre ordinateur client et vous pouvez partager votre clé publique avec tous les serveurs sur lesquels vous souhaites vous authentifier.

Lors de chaque connexion, le serveur chiffre une chaine de caractères aléatoire avec la clé publique. Seule la clé privée est suffisante pour déchiffrer cette chaine de caractères et la transmettre au serveur (sans risque puisque les transmissions SSH sont elles-mêmes cryptées). C’est le principe de toutes les procédures d’authentification (GnuPG, BeID, cartes bancaires, …)

Générer les clés de cryptage

Il faut donc, sur le cient, générer les clés RSA qui lui permettront de signer. Il existe d’autres types de clés mais le RSA est simple et sécurisé.

$ ssh-keygen -t rsa

Une passphrase permet d’avoir un seul mot de passe pour toutes vos connexions SSH, même si le vrai mot de passe de connexion est différent sur chaque serveur. Si vous ne voulez pas utiliser de passphrase pour une connexion entièrement automatisée, tapez simplement enter.

Copier la clé publique sur le serveur

Il faut maintenant copier la clé publique générée sur le serveur SSH, pour qu’il puisse bien vérifier que c’est vous qui signez la demande de connexion. On le fait par un petit scp (copie de fichier sur SSH):

$ scp ~/.ssh/id_rsa.pub utilisateur@serveur:~/.ssh/authorized_keys

Et voilà! C’est tout! Vous pouvez maintenant vous connecter sur votre serveur SSH sans mot de passe:

ssh utilisateur@serveur

Exécuter une commande sur le SSH

Une dernière petite astuce, si vous souhaitez directement exécuter une commande sur le serveur SSH, utilisez le paramètre
-t. Par exemple, pour ouvrir votre screen IRC:

$ ssh utilisateur@serveur -t screen -x irc