Dual Blog : DeFr's Weblog

SSH: Authentification par clé, sous Linux | lundi 10 mars 2008, 12h57

Mood: Neutral

Voila un petit billet inspiré des instructions que Kévin a posté pour pouvoir se connecter par paire de clé sous Windows en utilisant Putty. Ce billet a en fait deux buts distincts:

  1. Fournir une documentation en français sur la façon de faire ça, car si les sources anglophones sont abondantes, il me semble qu'on ne peut pas en dire de même pour le web francophone.
  2. Montrer que c'est plus simple à mettre en oeuvre sous Linux ;-)

Commencons par satisfaire les gens pressés qui pourraient tomber sur ce post par Google: ce que vous souhaitez savoir se résume à quatres commandes

ssh-keygen eval `ssh-agent -s` ssh-add ssh-copy-id hostname

Maintenant que les gens pressés sont partis, rentrons dans le détail de ces différentes opérations ^^

Génération d'une paire de clé

Avant toute chose, pour pouvoir s'identifier sur un serveur avec une paire de clé (le même principe cryptographique que celui qui est utilisé pour pouvoir signer ses courriels, ou dans certains protocoles sécurisés comme HTTPS), il est necessaire de générer la-dites paire de clé, c'est-à-dire une clé publique, que l'on insérera sur l'ensemble des serveurs sur lesquels on veut pouvoir se connecter, et une clé privé qu'il est indispensable de conserver en lieu sur, et qui nous permettra de nous identifier.

Pour cela, on dispose d'une commande particulièrement utile, ssh-keygen, qui se charge de cette tâche. Il est possible de lui préciser le type de clé et la taille de cette dernière, ce qui donnerait quelque chose du genre ssh-keygen -t rsa -b 1024. L'emplacement par défaut nous conviendra dans 99% des cas, il est donc possible de simplement appuyer sur entrée pour répondre à la première question que la commande va alors poser. Il s'agit ensuite de choisir une phrase de passe, permettant de sécuriser la clé: je vous laisse seul juge, mais le champ s'appelle phrase de passe et non pas mot de passe pour une bonne raison ;-). Une fois cette formalité accomplie, ca y est, vous avez votre paire de clé

Une session en terminal typique générant cette paire de clé ressemble donc à :

defr_test@Albus> ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/defr_test/.ssh/id_rsa): Created directory '/home/defr_test/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/defr_test/.ssh/id_rsa. Your public key has been saved in /home/defr_test/.ssh/id_rsa.pub. The key fingerprint is: e8:f9:37:dc:3b:e0:c4:6c:00:c1:fb:c7:c3:f8:2d:28 defr_test@Albus

Lancement de votre agent d'identification

On entre désormais dans les opérations qui devront s'effectué à chaque fois que l'on souhaitera se connecter. Il est tout d'abord necessaire de lancer ssh-agent, via eval `ssh-agent -s`. Je vous conseille d'ajouter cela au lancement de votre session, donc à la fin de votre fichier .bashrc, .zshrc, ...

Validation de votre identité

Une fois l'agent lancé, potentiellement automatiquement si vous avez suivi le conseil de le lancer automatiquement lorsque vous ouvrez une session sur le système, il est necessaire de lui ajouter votre clé privé. Pour cela, il suffit d'utiliser ssh-add, qui vous demandera la phrase de passe qui a été utilisé lors de la création de la clé. Il est à noter que pour les personnes réfractaires au terminal, il est tout à fait possible d'utiliser gtk2-ssh-askpass, qui vous créera une jolie interface dans laquelle vous devrez taper la phrase de passe, mais je n'ai pas trop exploré cette option.

Une session comportant le lancement de ssh-agent et ssh-add ressemble à cela:

defr_test@Albus> eval `ssh-agent -s` Agent pid 12883 defr_test@Albus> ssh-add Enter passphrase for /home/defr_test/.ssh/id_rsa: Identity added: /home/defr_test/.ssh/id_rsa (/home/defr_test/.ssh/id_rsa)

Copie de votre clé publique sur un serveur distant

Il reste désormais une dernière étape, faire connaitre au serveur sur lequel vous souhaitez vous connectez la clé publique. Là encore, ssh fournit gentiment un utilitaire pour faire cela, ssh-copy-id. En supposant que vous souhaitiez ainsi pouvoir vous connecter par clé à l'hôte example.com, il vous suffit donc de taper dans votre gentil terminal ssh-copy-id example.com. Comme d'habitude, on vous demandera à cette connexion un mot de passe... et fera tout le reste tout seul ^^ Vous commencerez à voir la différence à partir de votre prochaine connexion en SSH à ce serveur: votre agent s'identifiera, et vous serez par conséquent automatiquement connecté, sans mot de passe supplémentaire à fournir.

Revenir au blog
Vous souhaitez ajouter un nouveau commentaire ? Faites donc, il vous suffit de remplir le petit formulaire ci-dessous.
Sites visités