Git: gestion des clés ssh multiples

Cet article a pour but d’aider à configurer ssh afin de gérer plusieurs clés ou identités sur un compte utilisateur. Il est pratique d’avoir plusieurs identités pour se connecter à divers serveurs : une identité pour son travail, une identité pour ses serveurs persos ou encore pour github.

Petit Rappel

Pour commencer, il est utile de rappeller comment générer une clé (identité) avec ssh-keygen. Voici un exemple pour générer une clé avec RSA qui va s’appeller id_rsa.work. Toutes les options sont détaillées dans sa page de manuel.

$ ssh-keygen -t rsa -f ~/.ssh/id_rsa.work -C "Key for work"

Pour avoir plusieurs clés, il ne faut pas oublier de donner des noms différents aux fichiers. Maintenant que l’identité a été générée, il nous suffit de la copier vers les autres serveurs, pour cela il existe un autre logiciel : ssh-copy-id. La page du manuel est disponible ici. Voici un exemple de commande pour installer la clé publique précedente sur le serveur toto.fr avec l’utilisateur guest.

$ ssh-copy-id -i ~/.ssh/id_rsa.work guest@toto.fr"

Pour installer sa clé publique sur github, la documentation se trouve ici dans la section 4.

Solution

Pour la suite de l’article, l’utilisateur a créé deux clés ssh : id_rsa.work et id_rsa.gh. Toutes deux se trouvent dans le répertoire ~/.ssh. La connection à un serveur distant se fait via directement avec la commande ssh :

$ ssh -i ~/.ssh/id_rsa.work guest@toto.fr"

Pour aller plus vite, il suffit d’ajouter un alias dans le fichier de configuration du shell mais ssh peut être directement configuré gràce au fichier ~/.ssh/config. Il est ainsi possible de définir pour chaque serveur la clé qui doit être utilisée, l’utilisateur ainsi que les options de connexion sans les ajouter à chaque fois en ligne de commande. Voici un exemple qui permet à l’utilisateur de se connecter sur toutes les machines de work.lan avec sa clé réservée au travail et de se connecter sur github avec son autre identité.

Host *.work.lan
  IdentityFile ~/.ssh/id_rsa.work
  User guest

Host github.com
  IdentityFile ~/.ssh/id_rsa.gh
  User toto