Question Une manière vraiment verbeuse de tester la connexion Git via SSH?


En utilisant GIT, j'ai problèmes d'utilisation de GIT sur SSH, et comme cela fonctionne bien à la fois du travail et à la maison avec un modem différent, c'est évidemment mon modem domestique qui fonctionne. Je n'ai aucun problème pour 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 configure une connexion "test", et me permet de savoir exactement quand et où le problème se produit?

Presque toutes les commandes "plus grandes" (telles que fetch, clone, ou push avec beaucoup de données) de git (même en cas d'exécution avec -v) juste "accrocher" au milieu de la connexion à distance sans indication de la raison pour laquelle ils se sont arrêtés, ils ne sont donc d'aucune utilité.

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


66
2017-08-25 02:40


origine




Réponses:


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  git@github.com:me/test.git (fetch)
origin  git@github.com:me/test.git (push)

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

vim ~/.ssh/config

Et ajouter:

Host github.com
    LogLevel DEBUG3

En utilisant les opérations git, vous devriez recevoir beaucoup de messages de débogage, maintenant. Pour obtenir des messages de débogage inférieurs, essayez d'utiliser DEBUG1

Pour Versions GIT> = 2.3.0 voir le réponse de @Flimm pour une solution plus intelligente.


70
2017-10-27 12:52





Variable d'environnement

A partir de la version 2.3.0 de Git, vous pouvez utiliser la variable d'environnement GIT_SSH_COMMAND et passer le -v argument verbeux comme ceci:

GIT_SSH_COMMAND="ssh -v" git clone example

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

GIT_SSH_COMMAND="ssh -vvv" git clone example

Git config

A partir de la version 2.10.0 de Git, qui dans les repos de 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

65
2018-05-08 09:44



Pour moi au moins, si je fais ça: GIT_SSH_COMMAND="ssh -v" git clone example Je peux déboguer la version SSH, elle est imprimée après Cloning into message, mais échoue à git clone. Après je retire GIT_SSH_COMMAND Ça marche. En fin de compte, servi le but. - Paulo Oliveira
Pour une fois ce sera mieux: git -c core.sshCommand="ssh -vvv" pull - Joseph K. Strauss
Devrait être la réponse acceptée - Todd Freed
git config --global core.sshCommand "ssh -vvv" git clone example - Azodium


Lecture à travers man git, il existe des variables environnementales utiles que vous pouvez définir, GIT_TRACE_PACKET et GIT_TRACE. Par exemple:

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

Un peu tard pour le jeu, mais j'espère que cela aide quelqu'un!


14
2017-11-02 19:42



Cela est utile, mais vous ne recevez aucun message sur les problèmes de connexion avec SSH. Mais si la connexion SSH fonctionne, c'est le moyen de déboguer plus loin. - Trendfischer


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, essayez 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 git@github.com.

D'après mon expérience, une session SSH pendant l'installation est généralement effectuée 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 donnée à Github.


5
2017-08-25 04:31



Merci pour la réponse, mais je devrais probablement avoir posé la question différemment (puisque GitHub n'autorise pas les connexions SSH directes comme celle-ci). J'ai édité le post et le titre, mais est-il préférable de jeter celui-ci et de créer une nouvelle question à la place? - IQAndreas
@IQAndreas, GitHub autorise les connexions SSH comme celle-ci dans le sens où la phase d'authentification sera effectuée et si le problème se produit effectivement dans l'étape SSH, vous le verrez de cette manière. Si vous constatez que vous ne pouvez même pas aller aussi loin, il se passe quelque chose qui empêche la connexion même d'être faite. - tgies
Je suis authentifié très bien, et parfois push/pull sur le repo sans problèmes. Mais souvent, il se "bloque" au milieu de la commande et ne se poursuit pas (surtout lorsque je transfère de grandes quantités de données, comme un grand clone ou push). Il n'y a pas de message d'erreur, il se trouve juste là et ne continue pas. - IQAndreas


Je ne vois pas de moyen de dire à git (1) la commande externe à utiliser pour ssh (1), mais pour contourner ce problème, renommez simplement / path / to / ssh en /path/to/ssh.orig, créez un shell wrapper de script / path / to / ssh et ajout des indicateurs -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

J'obtiens une sortie détaillée lors de l'exécution de commandes git sur un transport ssh. Une fois le débogage terminé, supprimez le script et restaurez /path/to/ssh.orig dans / path / to / ssh.


3
2017-10-23 17:04



Au lieu de déplacer des fichiers dans /usr/bin, envisagez de mettre le script wrapper dans /usr/local/bin. - muru
Au moins sur mon étrange installation de Windows, la variable d'environnement GIT_SSH peut être défini pour pointer sur le binaire que vous souhaitez que Git utilise. - Coderer