Vraiment moyen de tester la connexion Git sur SSH?

109

Lorsque j'utilise GIT, j'ai du mal à utiliser GIT sur SSH , et comme cela fonctionne très bien, que ce soit au travail ou à la maison avec un modem différent, c'est évidemment mon modem à la maison qui fonctionne. Je n'ai aucun problème à me connecter via HTTP.

Donc, je suppose que c'est un problème SSH, mais je ne suis pas un expert pour l'utiliser directement. Existe-t-il une commande que je peux exécuter qui établit une connexion "test" et me permet de savoir exactement quand et où le long de la ligne le problème survient?

Presque toutes les commandes "plus grandes" (telles que fetch, cloneou pushavec beaucoup de données) de git(même lorsqu'elles sont exécutées -v) se "suspendent" juste au milieu d'une connexion à distance, sans indication de la raison pour laquelle elles ont été arrêtées, elles sont donc inutiles. .

Est-il possible d'obtenir plus de détails sur ce qui se passe dans la connexion SSH?

IQAndreas
la source

Réponses:

113

Variable d'environnement

À partir de la version 2.3.0 de Git, vous pouvez utiliser la variable d'environnement GIT_SSH_COMMANDet transmettre l' -vargument détaillé comme suit:

GIT_SSH_COMMAND="ssh -v" git clone example

Pour être plus prolixe, faites-le -vvv:

GIT_SSH_COMMAND="ssh -vvv" git clone example

Git config

À partir de la version 2.10.0 de Git, qui figurera dans le dépôt d'Ubuntu 17.04, vous pouvez enregistrer cette configuration globalement, ou par dépôt comme dans cet exemple:

git config core.sshCommand "ssh -vvv"
git pull
Flimm
la source
Pour moi du moins, si je fais ceci: GIT_SSH_COMMAND="ssh -v" git clone exampleje peux déboguer la version SSH, elle est imprimée après le Cloning intomessage, mais échoue à git clone. Après je retire GIT_SSH_COMMANDça fonctionne. En fin de compte, servi l'objectif.
Paulo Oliveira
5
Pour une fois, ce sera mieux:git -c core.sshCommand="ssh -vvv" pull
Joseph K. Strauss,
git config --global core.sshCommand "ssh -vvv" git clone example
Azodium
82

J'avais un problème similaire. Pour le débogage, j'ai ajouté une ligne dans mon ssh_config. Voici comment je l'ai fait:

git remote -v

Vous y trouverez une ligne comme celle-ci:

origin  [email protected]:me/test.git (fetch)
origin  [email protected]:me/test.git (push)

Dans ce cas, l'hôte est github.com. Vous pouvez maintenant ajouter une entrée d’hôte dans votre configuration ssh:

vim ~/.ssh/config

Et ajouter:

Host github.com
    LogLevel DEBUG3

Lors de l’utilisation des opérations git, vous devriez recevoir beaucoup de messages de débogage, maintenant. Pour obtenir des messages de débogage moins importants, essayez d’utiliserDEBUG1

Pour les versions GIT> = 2.3.0, voir la réponse de @Flimm pour une solution plus intelligente.

Trendfischer
la source
14

En lisant man git, il y a des variables environnementales utiles que vous pouvez définir, GIT_TRACE_PACKETet GIT_TRACE. Par exemple:

GIT_TRACE_PACKET=true git clone ssh://[...]

Un peu tard dans le match, mais j'espère que cela aidera quelqu'un!

Bcherny
la source
1
Ceci est utile, mais vous ne recevez aucun message concernant des problèmes de connexion avec SSH. Mais si la connexion SSH fonctionne, c'est le moyen de déboguer plus loin.
Trendfischer
5

Par man ssh:

 -v      Verbose mode.  Causes ssh to print debugging messages about its progress.  This
         is helpful in debugging connection, authentication, and configuration problems.
         Multiple -v options increase the verbosity.  The maximum is 3.

Alors, essaie ssh -v. Si cela ne vous dit pas ce que vous devez savoir, vous pouvez ajouter un ou deux vs pour des informations de débogage encore plus détaillées. Pour Github en particulier, essayez ssh -vvvT [email protected].

D'après mon expérience, une session SSH est suspendue lors de l'installation lorsque le client ne peut pas exécuter la méthode d'authentification choisie. Vérifiez que votre clé privée est au bon endroit avec les autorisations appropriées et correspond à la clé publique que vous avez fournie à Github.

tgies
la source
Merci pour la réponse, mais j'aurais probablement dû poser la question différemment (puisque GitHub n'autorise pas les connexions directes SSH comme ça). J'ai édité le post et le titre, mais est-il préférable de supprimer celui-ci et de créer une nouvelle question?
IQAndreas
@IQAndreas, GitHub autorise les connexions SSH de la sorte en ce sens que la phase d'authentification sera effectuée. Si le problème se produit effectivement à l'étape SSH, vous le verrez ainsi. Si vous constatez que vous ne pouvez même pas aller aussi loin, il se passe quelque chose qui empêche la connexion d'être établie.
jeudi
1
Je suis authentifié très bien, et parfois push/ pullsur le repo sans aucun problème. Mais souvent, il se "bloque" au milieu de la commande et ne continue pas (surtout lorsque je transfère de grandes quantités de données, telles que des données importantes cloneou push). Il n'y a pas de message d'erreur, il reste juste là et ne continue pas.
IQAndreas
3

Je ne vois pas comment indiquer à git (1) la commande externe à utiliser pour ssh (1), mais comme solution de contournement, renommez simplement / path / to / ssh en /path/to/ssh.orig, créez un shell script wrapper / path / to / ssh, et ajoutez les drapeaux -v:

$ sudo mv /usr/bin/ssh /usr/bin/ssh.orig
$ sudo vim /usr/bin/ssh
$ cat /usr/bin/ssh
#!/bin/sh

if [ -x /usr/bin/ssh.orig ]; then
    exec /usr/bin/ssh.orig -v -v -v "${@}"
fi

$ sudo chmod a+x /usr/bin/ssh

Je reçois une sortie commentée en exécutant des commandes git opérant sur un transport ssh. Une fois le débogage terminé, supprimez le script et restaurez /path/to/ssh.orig dans / path / to / ssh.

ScoobiFreeBSD
la source
4
Au lieu de déplacer des fichiers /usr/bin, envisagez de placer le script wrapper dans /usr/local/bin.
Muru
2
Au moins sur mon étrange installation Windows, la variable d'environnement GIT_SSHpeut être configurée pour pointer vers le binaire que vous voulez que Git utilise.
Codeur
Comme dit, vous ne voulez certainement pas modifier le fichier ssh original, mais j'aurais des réserves sur la solution de contournement dans / usr / local /. Ce n'est pas transparent, et il est facilement piétiné. BETTER: placez votre script de contournement dans $ HOME / bin et ajoutez ce nouveau répertoire bin dans la variable $ PATH de votre utilisateur, avant les autres segments PATH. Et avant cela, je vérifiais qu’il n’y avait pas une solution ENV var qui soit encore meilleure (cette réponse est ancienne).
Scott Prive