Git et SSH, quelle clé est utilisée?

94

Supposons que votre .sshrépertoire contient 30 clés (15 privées et 15 publiques).

Où dans Git peut-on vérifier lequel est utilisé pour se connecter à un référentiel distant donné?

James Raitsev
la source
10
Celui qui a voté pour "fermer", cette question - est directement liée à la programmation pour la même raison que les questions sur GIT sont autorisées ici
James Raitsev
1
Sans doute ... C'est vraiment une question de super-utilisateur, le problème ici n'est pas git, mais la plate-forme sur laquelle il fonctionne. Vous ne pouvez pas vérifier "in git" pour le problème, car git s'en moque, il ne concerne que la façon dont vous utilisez ssh et comment il est configuré. Utilisez-vous ssh-agent, tout type de système de gestion de clés, quel système d'exploitation utilisez-vous, quelle version, etc.?
Arafangion

Réponses:

68

L'entrée suivante dans le .ssh/configfichier résout le problème

  host git.assembla.com
  user git
  identityfile ~/.ssh/whatever

~/.ssh/whateverest un chemin vers votre clé privée

De plus, l'utilisateur et l'hôte peuvent être récupérés

git push [email protected]:repo_name.git
         ^__ ^_______________
         user host
James Raitsev
la source
donc si je voulais utiliser une autre clé ssh pour un hôte différent, est-ce que je répéterais simplement la même chose après le premier ?? Le fichier d'identité appartient-il au premier hôte avant lui?
MikeSchem
ok, oui, il semble que ce soit le cas cyberciti.biz/faq/…
MikeSchem
67

L'exécution de ssh en mode verbeux, alias ssh -v user@host, affichera une énorme charge d'informations de débogage, qui contiennent également des détails sur les fichiers de clés qu'il tente de se connecter.

debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/user/.ssh/id_rsa
debug1: Server accepts key: pkalg ssh-rsa blen 332
debug1: read PEM private key done: type RSA
debug1: Authentication succeeded (publickey).

Maintenant, si vous combinez cela, avec l'étape 4 de la page d'aide SSH de Git , vous ssh -vT [email protected]pouvez vous donner la réponse.

Remarque: vous pouvez également utiliser le -icommutateur pour indiquer à ssh lors de l'exécution de la commande, quel fichier de clés utiliser.

Vajk Hermecz
la source
1
Vous pouvez également grep la sortie d'erreur standard de la commande ssh pour trouver le fichier clé comme ceci: ssh -vv user@host 2> >(grep Offering)- cela facilitera les choses. Le dernier fichier doit être la clé publique. Par exemple:debug1: Offering RSA public key: /Users/macbookpro/.ssh/id_rsa
Gianfranco P.
3
githubn'est pas la même chose que git.
ForeverWintr
9

À moins qu'il ne soit spécifié sur le, .ssh/configil utilisera le fichier de clé privée par défaut.

Le fichier par défaut est ~/.ssh/id_rsaou ~/.ssh/id_dsaou ~/.ssh/identityselon la version du protocole.

Rodrigo Flores
la source
Quand les clés sont ajoutées à des hôtes connus?
mountainLion
6

Je dirais que le plus pratique à mon goût serait:

GIT_SSH_COMMAND='ssh -v' git …

bien sûr, selon les circonstances, il peut être avantageux de simplement l'exporter vers l'environnement actuel de SHELL afin de ne pas avoir à l'ajouter manuellement à chaque fois. Alors ce serait comme ça:

export GIT_SSH_COMMAND='ssh -v'
git …

- Comme le man gitsuggère, il existe quelques variables environnementales qui affectent les opérations de Git avec l'utilisation de SSH. Selon man sshvous, vous pouvez obtenir des informations de débogage lors du déploiement de l' -voption (non seulement, mais aussi, consultez le manuel si vous êtes curieux d'en savoir plus).

quelle clé est utilisée?

Dans la sortie, vous verriez un peu comme…

debug1: Offering public key: …

… Qui est la réponse à votre qn.

poige
la source
1
OUI. Cela devrait être la réponse acceptée. Pour le faire fonctionner sur Windows CMD (ugh), utilisez: set GIT_SSH_COMMAND=ssh -v. Cela m'a aidé à comprendre que le ssh-config Inlcude-Path devrait être quelque chose comme ça sur Windows: Include /C/Users/YourUserName.ssh/configpour faire ssh et donc git utiliser un fichier de configuration qui utilise ensuite par exemple une HOST *entrée pour spécifier le fichier d'identité utilisé par git / ssh.
icyerasor le
5

Comme il gitne sert sshqu'à se connecter, il utilisera la clé sshutilisée pour se connecter à l'hôte distant. Voir le ~/.ssh/configfichier pour plus de détails; le hostbloc utilise la IdentityFiledirective pour spécifier la clé privée à utiliser. La ssh_config(5)page de manuel contient tous les détails.

sarnold
la source
Hmm .. le fichier n'existe pas sur mon système. Devrait-il?
James Raitsev
1
@JAM Quel système d'exploitation utilisez-vous? Aussi, parfois le fichier de configuration est à/etc/ssh/ssh_config
Je suis sur MACOS. Trouvé /etc/ssh_configqui semble être un fichier plein d'entrées commentées
James Raitsev
@sarnold Vous pouvez créer ~/.ssh/configvous-même.
xdazz
4

C'est peut-être super, mais après l'avoir exécuté, ssh -vT [email protected]il m'a montré qu'il vérifiait /root/.sshles clés, je m'attendais à ce qu'il vérifie mon répertoire personnel, puis j'ai réalisé que j'étais connecté en tant que root!

Moak
la source
Cette technique, entre autres la même sshmanière d'interroger sont les bonnes solutions. Merci.
eigenfield
1

Sur le serveur distant, modifiez le fichier sshd_config et modifiez LogLevel de INFO à VERBOSE et redémarrez ssh.

Maintenant, votre fichier journal contiendra l'empreinte digitale de la clé qui a été utilisée pour authentifier chaque utilisateur.

Sur Ubuntu, ces fichiers sont:

/etc/ssh/sshd_config
/var/log/auth.log

mais ils peuvent être différents sur une autre distribution. Il suffit de google pour leur emplacement (certains utilisent / var / log / secure par exemple).

seumasmac
la source