Дійсно багатослівний спосіб перевірити Git-зв’язок через SSH?


109

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

Отже, я припускаю, що це проблема SSH, але я не знаю, як безпосередньо її використовувати. Чи є якась команда, яку я можу запустити, яка встановлює "тестове" з'єднання, і дає мені знати, коли і де уздовж лінії виникає проблема?

В основному всі "більші" команди (такі як fetch, cloneабо pushз великою кількістю даних) з git(навіть при запуску з -v) просто "зависають" посередині підключення віддалено, не вказуючи, чому вони зупинилися, тому вони не мають користі. .

Чи можна отримати детальнішу інформацію про те, що відбувається в SSH-з'єднанні?

Відповіді:


113

Змінна середовище

З 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

Принаймні для мене: Якщо я це роблю: GIT_SSH_COMMAND="ssh -v" git clone exampleя можу налагодити версію SSH, вона надрукується після Cloning intoповідомлення, але не вдається git clone. Після того як я GIT_SSH_COMMANDйого видалюю, він працює. Зрештою, послужили меті.
Паулу Олівейра

5
Одноразово це буде краще:git -c core.sshCommand="ssh -vvv" pull
Джозеф К. Стросс

git config --global core.sshCommand "ssh -vvv" git clone example
Азодіум

81

У мене була схожа проблема. Для налагодження я додав рядок у свою ssh_config. Ось як я це зробив:

git remote -v

Там ви знайдете такий рядок:

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

У цьому випадку господар є github.com. Тепер ви можете додати хост-запис у свою ssh-конфігурацію:

vim ~/.ssh/config

І додайте:

Host github.com
    LogLevel DEBUG3

При використанні операцій git зараз вам слід отримати багато повідомлень про налагодження. Щоб отримати менше повідомлень про налагодження, спробуйте скористатисяDEBUG1

Для версій GIT> = 2.3.0 див. Відповідь від @Flimm для розумнішого рішення.


14

Читаючи man git, є деякі корисні змінні середовища, які ви можете встановити, GIT_TRACE_PACKETі GIT_TRACE. Наприклад:

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

Трохи запізнюємось на гру, але сподіваємось, це комусь допоможе!


1
Це корисно, але ви не отримуєте жодних повідомлень про проблеми з підключенням до SSH. Але якщо з'єднання SSH працює, це спосіб налагодження подальшої роботи.
Trendfischer

5

За 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. Якщо це не говорить про те, що вам потрібно знати, ви можете додати одну або дві vs для ще більш детальної інформації про налагодження. Зокрема, для Github спробуйте ssh -vvvT git@github.com.

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


Дякую за відповідь, але, мабуть, я мав би поставити питання по-іншому (оскільки GitHub не дозволяє прямі SSH-з'єднання, як це). Я відредагував публікацію та назву, але чи краще відмовитись від цього і створити замість цього нове запитання?
IQAndreas

@IQAndreas, GitHub дійсно дозволяє SSH-з'єднання на зразок того, що фаза аутентифікації буде проведена, і якщо проблема дійсно відбувається на кроці SSH, ви побачите це саме так. Якщо ви виявите, що навіть не можете зайти так далеко, щось відбувається, що заважає з’єднанню навіть здійснюватися.
tgies

1
Мене проходять автентифікацію просто чудово, а іноді push/ pullна репо без проблем. Але часто він просто «зависає» в середині команди і не буде продовжуватися (особливо, коли я передаю велику кількість даних, таких як велика cloneабо push). Повідомлень про помилки немає, воно просто сидить там і не продовжується.
IQAndreas

3

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


4
Замість того, щоб переміщувати файли /usr/bin, подумайте про те, щоб ввести сценарій обгортки /usr/local/bin.
муру

2
Принаймні, на моїй дивній установці Windows, змінну середовища GIT_SSHможна встановити так, щоб вона вказувала на бінарний файл, який ви бажаєте використовувати Git.
Кодерер

Як було сказано, ви точно не хочете змінювати оригінальний файл ssh, але я б застережувався щодо вирішення в / usr / local /. Він не прозорий, і його легко натоптати. КРАЩЕ: покладіть свій обхідний сценарій у $ HOME / bin та додайте цей новий dir у змінну $ PATH вашого користувача перед іншими сегментами PATH. І перш ніж це зробити, я перевірив би, чи немає рішення ENV var, яке ще краще (ця відповідь стара).
Скотт Прів
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.