Действительно ли верный способ проверить соединение Git через SSH?

71

При использовании GIT у меня есть проблемы с использованием GIT через SSH , и поскольку он отлично работает как с работы, так и дома с другим модемом, это, очевидно, мой домашний модем, который действует. У меня нет проблем с подключением через HTTP.

Итак, я предполагаю, что это проблема SSH, но я не эксперт по ее использованию. Есть ли какая-нибудь команда, которую я могу запустить, которая устанавливает «тестовое» соединение и позволяет мне точно знать, когда и где вдоль линии возникает проблема?

Практически все «большие» команды (такие как fetch , clone или push с большим количеством данных) из git (даже при запуске с -v ) просто «зависают» в середине подключая дистанционно без каких-либо указаний относительно того, почему они остановились, поэтому они бесполезны.

Есть ли способ получить более подробную информацию о том, что происходит в SSH-соединении?

    
задан IQAndreas 25.08.2013 в 04:40
источник

5 ответов

74

У меня была аналогичная проблема. Для отладки я добавил строку в свой ssh_config. Вот как я это сделал:

git remote -v

Там вы найдете такую строку:

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

В этом случае хост github.com . Теперь вы можете добавить Host-Entry в конфигурацию ssh:

vim ~/.ssh/config

И добавьте:

Host github.com
    LogLevel DEBUG3

При использовании git-операций вы должны получить много отладочных сообщений. Чтобы получить менее отладочные сообщения, попробуйте использовать DEBUG1

Для версий GIT > = 2.3.0 см. ответ от @Flimm для более разумное решение.

    
ответ дан Trendfischer 27.10.2014 в 13:52
73

Переменная среды

Из Git версии 2.3.0 вы можете использовать переменную окружения GIT_SSH_COMMAND и передать аргумент -v verbose следующим образом:

GIT_SSH_COMMAND="ssh -v" git clone example

Чтобы быть дополнительным подробным, сделайте это -vvv :

GIT_SSH_COMMAND="ssh -vvv" git clone example

Git config

Из Git версии 2.10.0, которая будет в репозиториях Ubuntu 17.04, вы можете сохранить эту конфигурацию по всему миру или за репо, как в этом примере:

git config core.sshCommand "ssh -vvv"
git pull
    
ответ дан Flimm 08.05.2015 в 11:44
14

Чтение через man git , есть некоторые полезные переменные среды, которые вы можете установить, GIT_TRACE_PACKET и GIT_TRACE . Например:

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

Немного поздно в игре, но, надеюсь, это помогает кому-то!

    
ответ дан bcherny 02.11.2014 в 20:42
5

Per 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.

Итак, попробуйте ssh -v . Если это не говорит вам, что вам нужно знать, вы можете добавить один или два v s для получения более подробной информации об отладке. Для Github, в частности, попробуйте ssh -vvvT [email protected] .

Обычно, по моему опыту, сеанс SSH, зависающий во время установки, происходит, когда клиент не может выполнить выбранный метод аутентификации. Убедитесь, что ваш закрытый ключ находится в нужном месте с правильными разрешениями и соответствует открытому ключу, предоставленному вами Github.

    
ответ дан tgies 25.08.2013 в 06:31
3

Я не вижу способа сказать git (1) внешнюю команду для использования для ssh (1), но в качестве обходного пути просто переименуйте / path / to / ssh в /path/to/ssh.orig, создайте оболочку сценария оболочки / путь / в / ssh и добавьте флаги -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

Я получаю подробный вывод при выполнении команд git, работающих над транспортом ssh. После выполнения отладки удалите скрипт и восстановите /path/to/ssh.orig в / path / to / ssh.

    
ответ дан ScoobiFreeBSD 23.10.2014 в 19:04