Sous Linux (CentOS, au cas où cela aurait de l'importance), j'ai un problème avec les commandes git. git peut tirer parti des clés chargées dans le cache de l'agent ssh, mais si les clés ne sont pas chargées, il ne semble pas prendre de mesures pour les charger (telles que l'appel à ssh-add).
J'ai configuré ~/.ssh/config comme suit :
$ cat ~/.ssh/config
Host github.com
User git
PreferredAuthentications publickey
IdentityFile ~/.ssh/github_id_rsa
Mon système est déjà équipé de ssh-agent. Je crois qu'il utilise une implémentation fournie par Gnome ( http://live.gnome.org/GnomeKeyring/Ssh ).
Je peux ajouter manuellement ma clé github avec la commande "ssh-add". Lorsque je le fais, je peux voir que la clé est chargée en utilisant "git add -l" et les commandes git qui se connectent à distance (par exemple "git remote update") fonctionnent sans demander de phrase d'authentification.
Ce que je veux toujours que les commandes git fassent, c'est.. :
-
Par défaut, si ssh-agent est en cours d'exécution et que la clé nécessaire n'est pas déjà chargée, utilisez ssh-add pour charger la clé dans ssh-agent.
-
ssh-add semble avoir besoin d'aide (via un paramètre) si le fichier de clé n'est pas l'un des fichiers par défaut (par exemple 'id_rsa', 'id_dsa', ou 'identity'). Cela me semble être une erreur. J'ai une correspondance entre le nom d'hôte et le fichier IdentityFile spécifié dans ~/.ssh/config comme indiqué ci-dessus. Est-ce que ssh-add ne devrait pas être capable de l'utiliser ?
En outre...
- Pour simplifier le problème, j'ai essayé de supprimer le mappage 'IdentityFile' de ssh-config, et de renommer les fichiers de clés avec les noms par défaut (id_rsa et id_rsa.pub). Cela permet à "ssh-add" d'ajouter la clé sans arguments supplémentaires, mais même dans ce scénario simplifié, je ne vois pas de commandes git ajoutant des clés au cache de ssh-agent.
J'ai la même ~/.ssh/config sur ma machine MacOS (Snow Leopard), et elle semble faire exactement ce qu'il faut. Mais comment puis-je obtenir ce comportement sous Linux ? Je ne sais pas si cela est dû à une différence dans l'implémentation ou la configuration de ssh-agent, ssh-add, git, ou une autre combinaison.
Edit : Après avoir réfléchi un peu plus, je pense que cela devrait avoir plus à voir avec les outils ssh (peut-être surtout ssh-agent ?) qu'avec git. Après tout, ce comportement devrait être le même pour tout processus essayant d'établir des connexions ssh en utilisant les clés et les paramètres dans ~/.ssh, y compris la commande ssh elle-même.