2010
12.02

command logo [Tuto]   Echange de clés SSH sous Linux

Lorsque vous vous connectez régulièrement à un (ou plusieurs) serveur(s) ssh, il est parfois pénible d’avoir à retaper tout le temps le mot de passe du serveur distant, il y a pourtant une manière simple d’éviter cela en effectuant un échange de clé ssh entre client et serveur, ça demande quelques minutes et après on est tranquilles icon smile [Tuto]   Echange de clés SSH sous Linux

Intéressons-nous à ce que nous allons faire ici. Tout d’abord, le travail se fera essentiellement sur le client, ce dernier va générer 2 clés, une publique et une privée, la clé publique sera destinée au serveur, tandis que la clé publique restera chez le client. Niveau sécurité du bazar, nous pouvons utiliser une « passphrase », en somme un mot de passe pour la clé, ce qui implique d’avoir la clé ainsi que la passphrase de la clé pour se connecter.

Quel intérêt d’utiliser un mot de passe alors que je veux justement ne pas avoir à en taper ?! Effectivement, ça parait un peu troublant, mais nous verrons comment utiliser ssh-agent qui permettra de charger la clé décodée en mémoire durant toute la session afin de ne plus avoir à retaper le mot de passe de la clé à chaque connexion au serveur, mais une seule fois par session sur la machine.

En gros, c’est plus secure, car utiliser une passphrase permet de crypter la clé, mais vous pouvez très bien ne pas utiliser de passphrase afin de vous connecter directement sans qu’on ne vous demande jamais rien, à vos risques et périls ! Tout dépend du contexte de l’utilisation d’un échange de clé, si vous considérez qu’il y a des risques potentiels ou non, si vous voulez jouer la sécurité ou non. Allez hop, c’est parti !

Génération des clés

Je vous rappelle que nous travaillons sur le client, nous allons générer les clés publique/privée à l’aide de cette commande :

[root@client /]# ssh-keygen -t dsa -N "youpi"

Le paramètre -t permet de spécifier le type de clé, nous utiliserons une clé dsa (que l’on considérera comme un tantinet plus secure qu’une clé rsa ssh v2, je ne parle même pas de la clé rsa ssh v1, totalement obsolète…)
Le paramètre -N permet de définir la passphrase, ici youpi icon smile [Tuto]   Echange de clés SSH sous Linux Vous pouvez très bien la laisser vide si vous êtes un brin aventuriers, voire masochistes.

  • Avec passphrase : Clé cryptée.
  • Sans passphrase : Clé non-cryptée.

Le résultat nous indique l’emplacement où les clés ont été générées :

Your identification has been saved in /root/.ssh/id_dsa.
Your public key has been saved in /root/.ssh/id_dsa.pub.

Comme vous l’avez probablement remarqué, nous travaillerons avec root dans ce tuto, mais la génération de clé se fera dans votre home directory (~/). Par exemple ~/.ssh/ correspond à /home/ex0dus/.ssh ou /home/troll/.ssh …

Autre remarque, le dossier .ssh est caché (à cause du point devant), donc ne paniquez pas si vous ne le voyez pas dans votre home directory en faisant un ls, essayez donc un ls -a plutôt icon wink [Tuto]   Echange de clés SSH sous Linux

Envoie de la clé publique au serveur

Les clés générées, nous allons garder la clé privée avec nous sur la machine cliente, en envoyer la clé publique au serveur. Vérifions que les clés ont bien été générées (ya pas de raison que ce ne soit pas le cas, mais bon!) :

[root@client /]# ls ~/.ssh/
id_dsa id_dsa.pub known_hosts

Bien, tout est là, envoyons la clé publique au serveur, et pour le fun, nous ferons tout en une seule ligne de commande icon smile [Tuto]   Echange de clés SSH sous Linux

[root@client /]# cat ~/.ssh/id_dsa.pub | ssh root@ip_du_serveur "cat - > ~/.ssh/authorized_keys"

Le password du serveur vous sera bien entendu demandé. On peut s’amuser à vérifier que la clé publique a bien été rentrée dans le fichier authorized_keys, cela permet au passage de tester la connexion ssh :

[root@client /]# ssh root@ip_du_serveur cat ~/.ssh/authorized_keys

Nous allons également vérifier que le serveur fait bien partie des hôtes connus (contenu du fichier known_hosts, bon okay, je me suis pas foulé pour la traduction, je le concède…). A la suite de cette commande, vous devriez pouvoir vérifier que le client connait bien l’ip du serveur distant, ainsi que le type de clé utilisé (ici ssh-dsa

[root@client /]# cat ~/.ssh/known_hosts

Si vous avez mis une passphrase, elle vous sera demandée afin de décrypter la clé, si vous n’en avez pas mis, ça fonctionne direct !

Utilisation de l’agent SSH

Si vous avez choisis de faire de l’échange de clé SSH, ce n’est pas pour avoir à encore taper un mot de passe à chaque fois (en l’occurrence la passphrase), d’où l’intérêt de l’utilisation de l’agent SSH qui permettra de retenir les clés privés durant toute la durée de la session, vous n’aurez alors qu’à rentrer la passphrase qu’une seule fois, et vous permettra ainsi de vous connecter plusieurs fois à votre serveur directement sans rien rentrer icon smile [Tuto]   Echange de clés SSH sous Linux

Pour cela, nous utiliserons le programme ssh-add :

[root@client /]# ssh-add
Enter passphrase for /root/.ssh/id_dsa:
Identity added: /root/.ssh/id_dsa (/root/.ssh/id_dsa)

La passphrase vous est demandée une dernière fois afin de décrypter la clé privée, et après vous êtes tranquilles ! Si vous obtenez l’erreur « Could not open a connection to your authentication agent. » lors de l’exécution de shh-add, il vous suffit de lancer la commande suivante au préalable :

[root@client /]# exec ssh-agent bash
[root@client /]# ssh-add

Ça devrait être bon ! icon smile [Tuto]   Echange de clés SSH sous Linux

Vous pouvez à présent essayer de vous connecter à votre serveur :

[root@client /]# ssh root@ip_du_serveur

Et hop magie icon smile [Tuto]   Echange de clés SSH sous Linux

Have fun !

Be Sociable, Share!
  • more [Tuto]   Echange de clés SSH sous Linux

2 commentaires pour le moment

Ajoutez votre commentaire
  1. merci beaucoup pour cette explication clair
    je reviens régulièrement chercher cette information

  2. ca fait plusieurs fois que j’accède a ce tuto, car je sais qu’il est là, et que je nai pas besoin de me souvenir dans le détail les opérations à mener.
    Merci