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

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

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

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

Можно ли как-нибудь узнать больше о том, что происходит в SSH-соединении?

111
задан 10 October 2017 в 18:58

5 ответов

Переменная окружения

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

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
0
ответ дан 10 October 2017 в 18:58

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

git remote -v

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

origin  git@github.com:me/test.git (fetch)
origin  git@github.com:me/test.git (push)

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

vim ~/.ssh/config

И добавить:

Host github.com
    LogLevel DEBUG3

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

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

0
ответ дан 10 October 2017 в 18:58

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

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

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

0
ответ дан 10 October 2017 в 18:58

За 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 для еще более подробной информации об отладке. В частности, для Github попробуйте ssh -vvvT git@github.com.

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

0
ответ дан 10 October 2017 в 18:58

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

.
0
ответ дан 10 October 2017 в 18:58

Другие вопросы по тегам:

Похожие вопросы: