1 votes

Comment faire pour que git utilise ssh-add (quand c'est nécessaire) ?

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.

4voto

Chris Johnsen Points 36743

OpenSSH par défaut ne fait tout simplement pas ce que vous voulez. Les ssh utilisera toute clé déjà chargée dans l'agent configuré, mais n'ajoutera jamais de clés à l'agent.

L'ajout à l'agent de toute clé protégée par un mot de passe utilisée par l'agent. ssh "est dû aux changements apportés par Apple à la version du logiciel ssh il est fourni avec Mac OS X.


Une série typique de ssh utilisera load_identity_file de sshconnect2.c .

Apple ajoute à load_identity_file un appel à keychain_read_passphrase de keychain.c (ce fichier provient entièrement d'Apple).

keychain_read_passphrase utilise ssh_add_identity_constrained de authfd.c pour stocker la clé chargée dans l'agent.

Le seul autre utilisateur de ssh_add_identity_constrained es ssh-add.c ( ssh-add ) ; les "constantes" de niveau inférieur SSH2_AGENTC_ADD_IDENTITY y SSH2_AGENTC_ADD_ID_CONSTRAINED ne sont également utilisés que dans les authfd.c en ssh-agent.c ( ssh-agent ).

Ainsi, en règle générale, seuls les ssh-add charge les clés dans l'agent, mais Apple a étendu le ssh pour charger également les clés dans l'agent lorsqu'il demande la phrase de passe d'une clé dans l'interface graphique.

2voto

go2null Points 189

OpenSSH v7.2 ajout d'un support pour les AddKeysToAgent .

  • ssh(1) : Ajout d'une option client AddKeysToAgent qui peut être définie à
    Oui, non, demander ou confirmer. La valeur par défaut est "non". Quand
    activée, une clé privée utilisée lors de l'authentification sera
    ajouté à ssh-agent s'il est en cours d'exécution (avec confirmation activée si
    sur "confirmer").

Apple a adopté la norme OpenSSH dans macOS. 10.12.2 .

OpenSSH ne chargera plus automatiquement les clés dans ssh-agent. Cela permet d'aligner le comportement de macOS sur celui d'OpenSSH. aligne le comportement de macOS avec celui du projet OpenSSH en amont.

Il est possible pour l'utilisateur de réactiver les touches de chargement i en définissant cette option dans le fichier de configuration de ssh :

AddKeysToAgent oui

0voto

Charlie Points 651

Réponse courte : OpenSSH ne supporte pas cela, mais des versions modifiées de celui-ci, ou des implémentations alternatives d'outils liés à ssh, peuvent le faire.

Réponse plus longue :

OpenSSH ne le fait pas pour les raisons données dans la réponse de Chris Johnsen sur cette page. Cependant, il est possible d'obtenir ce comportement sous Linux en utilisant Gnome Keyring, qui fournit son propre agent ssh.

Dans la question que j'ai postée, j'ai dit que je pensais utiliser le porte-clés Gnome (puisque j'utilisais Gnome), mais ce n'était pas le cas. Je venais d'installer CentOS 5, et dans cette configuration, je suis presque sûr que le démon ssh-agent en cours d'exécution était celui d'OpenSSH.

J'ai réessayé avec Ubuntu 11.04, qui utilise définitivement l'agent ssh de Gnome Keyring. Dans cette configuration, j'obtiens le comportement recherché dans la question.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X