При использовании GIT у меня есть проблемы с использованием GIT поверх SSH , и, поскольку он отлично работает как на работе, так и дома с другим модемом, очевидно, мой домашний модем работает. У меня нет проблем с подключением по HTTP.
Итак, я предполагаю, что это проблема SSH, но я не эксперт в ее непосредственном использовании. Есть ли какая-либо команда, которую я могу запустить, которая устанавливает «тестовое» соединение и позволяет мне точно знать, когда и где вдоль линии возникает проблема?
Практически все «большие» команды (такие как fetch
, clone
или push
с большим количеством данных) из git
(даже при работе с -v
) просто «зависают» в середине удаленного соединения без указания того, почему они остановились, поэтому они бесполезно.
Можно ли как-нибудь узнать больше о том, что происходит в SSH-соединении?
В 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 2.10.0, которая будет в репозиториях Ubuntu 17.04, вы можете сохранить эту конфигурацию глобально или репо, как в этом примере:
git config core.sshCommand "ssh -vvv"
git pull
У меня была похожая проблема. Для отладки я добавил строку в свой 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 для более разумного решения. ]
Читая man git
, вы можете установить некоторые полезные переменные среды GIT_TRACE_PACKET
и GIT_TRACE
. Например:
GIT_TRACE_PACKET=true git clone ssh://[...]
Немного опоздал к игре, но, надеюсь, это кому-нибудь поможет!
За 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.
Я не вижу способа указать 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.
.