git clone не удался с информацией kex_exchange_identification: read: операция превысила время ожидания

Вопрос или проблема

Описание проблемы:

Я использовал корпоративную сеть и пытался получить свой собственный репозиторий для некоторых заметок в моем репозитории на github.com, но это не удалось. Я попытался получить более подробный лог с помощью следующих команд и получил следующие детали:

 GIT_TRACE=true \
GIT_CURL_VERBOSE=true \
GIT_SSH_COMMAND="ssh -vvv" \
GIT_TRACE_PACK_ACCESS=true \
GIT_TRACE_PACKET=true \
GIT_TRACE_PACKFILE=true \
GIT_TRACE_PERFORMANCE=true \
GIT_TRACE_SETUP=true \
GIT_TRACE_SHALLOW=true \
git clone  [email protected]:albertjone/Boostnotes.git
11:00:34.976275 exec-cmd.c:139          trace: разрешен исполняемый файл из стека Darwin: /Library/Developer/CommandLineTools/usr/bin/git
11:00:34.976973 exec-cmd.c:238          trace: разрешена директория исполняемого файла: /Library/Developer/CommandLineTools/usr/bin
11:00:34.977509 git.c:439               trace: встроенная команда: git clone [email protected]:albertjone/Boostnotes.git
Клонирую в 'Boostnotes'...
11:00:34.999871 run-command.c:663       trace: run_command: unset GIT_DIR; 'ssh -vvv' [email protected] 'git-upload-pack '\''albertjone/Boostnotes.git'\'''
OpenSSH_8.1p1, LibreSSL 2.7.3
debug1: Чтение конфигурационных данных /Users/xiaojguan/.ssh/config
debug1: Чтение конфигурационных данных /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config строка 47: Применение параметров для *
debug1: Подключение к github.com порт 22.
debug1: Соединение установлено.
debug1: файл идентичности /Users/xiaojguan/.ssh/id_rsa тип 0
debug1: файл идентичности /Users/xiaojguan/.ssh/id_rsa-cert тип -1
debug1: файл идентичности /Users/xiaojguan/.ssh/id_dsa тип -1
debug1: файл идентичности /Users/xiaojguan/.ssh/id_dsa-cert тип -1
debug1: файл идентичности /Users/xiaojguan/.ssh/id_ecdsa тип -1
debug1: файл идентичности /Users/xiaojguan/.ssh/id_ecdsa-cert тип -1
debug1: файл идентичности /Users/xiaojguan/.ssh/id_ed25519 тип -1
debug1: файл идентичности /Users/xiaojguan/.ssh/id_ed25519-cert тип -1
debug1: файл идентичности /Users/xiaojguan/.ssh/id_xmss тип -1
debug1: файл идентичности /Users/xiaojguan/.ssh/id_xmss-cert тип -1
debug1: Локальная версия строки SSH-2.0-OpenSSH_8.1
kex_exchange_identification: read: время ожидания операции истекло
fatal: Не удалось прочитать из удаленного репозитория.

Пожалуйста, убедитесь, что у вас есть правильные права доступа
и что репозиторий существует.
11:01:58.045282 trace.c:475             производительность: 83.067792000 с: команда git: /Library/Developer/CommandLineTools/usr/bin/git clone [email protected]:albertjone/Boostnotes.git

Что я сделал

  • Я много гуглил, но не нашел полезных ответов.

  • Я проверил, что я могу выполнить telnet на 22 порт github.com

❯ telnet github.com 22
Попытка 140.82.114.4...
Подключено к github.com.
Символ выхода: '^]'.

Вопрос

Хотя команда git clone работает с HTTP-протоколом, я немного упрям и хочу узнать, в чем причина и как это решить.

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

Вы заметите, что на моей системе, когда я подключаюсь к github.com на порту 22, я получаю баннер SSH с удаленной стороны:

$ nc github.com 22 </dev/null
SSH-2.0-babeld-cc5efb01

SSH и TLS (протокол безопасности, используемый в HTTPS) могут предотвратить чтение данных или вмешательство в данные незаметно, но они не могут предотвратить вмешательство в данные вообще. Нападающий все еще может предотвратить установление соединения или вмешаться в него так, что соединение будет прервано, поскольку вмешательство было обнаружено.

В данном случае устройство MITM вашей компании является нападающим и предотвращает работу соединения. Вы можете попытаться обойти это с помощью VPN, но если вы можете использовать HTTPS для достижения своей цели, вы лучше сделаете. Это менее вероятно заставит вас оказаться в неприятностях, по крайней мере.

Ответ или решение

Проблема с клонированием репозитория Git: kex_exchange_identification: read: Operation timed out

Клонирование репозитория Git с помощью SSH может подвергаться множеству проблем, особенно когда используется корпоративная сеть. Одной из распространённых ошибок является сообщение об ошибке kex_exchange_identification: read: Operation timed out, что указывает на проблемы при установлении SSH-соединения с удалённым сервером, в данном случае — с GitHub. Давайте разберёмся в возможных причинах этой проблемы и в том, как её можно решить.

Важная информация о вашем случае

Вы пытались клонировать репозиторий с помощью команды:

git clone [email protected]:albertjone/Boostnotes.git

Во время выполнения команды вы получили следующие сообщения о состоянии SSH-соединения:

  1. Соединение установлено: строка debug1: Connecting to github.com port 22. показывает, что ваше устройство успешно установило соединение с GitHub на порту 22.
  2. Таймаут: сообщение kex_exchange_identification: read: Operation timed out указывает на то, что сервер (GitHub) не смог отправить версии SSH после установления соединения, что приводило к таймауту.

Возможные причины

  1. Проблемы с сетью:

    • Ваша компания может использовать устройства для фильтрации или управления трафиком (например, прокси-серверы, межсетевые экраны или MITM-устройства), которые могут блокировать или искажать трафик на порту 22.
    • Некоторые организации могут использовать блокировки для порта 22, чтобы предотвратить использование SSH, что ограничивает работоспособность соединений.
  2. Настройки SSH:

    • Проверьте файл конфигурации SSH (/Users/xiaojguan/.ssh/config) на наличие особых настроек, которые могут мешать правильному установлению соединения.
  3. Проблемы с идентификацией:

    • Убедитесь, что ваш ключ SSH находится в списках авторизованных ключей на GitHub (находится в настройках вашего аккаунта GitHub).

Возможные решения

  1. Используйте HTTPS:

    • Вы уже отметили, что прямое клонирование через HTTP работает. Это, возможно, самое простое решение, поскольку HTTP-трафик в большинстве корпоративных сетей не блокируется.
    git clone https://github.com/albertjone/Boostnotes.git
  2. Обход сетевого фильтра:

    • Если вам необходимо использовать SSH, рассмотрите возможность использования VPN. Это может помочь вам обойти ограничения, установленные на вашей корпоративной сети.
  3. Проверка альтернативных портов:

    • Некоторые компании разрешают SSH-соединения через нестандартные порты, такие как 2222 или 443. Попробуйте выполнить клонирование через другой порт (при необходимости, проконсультируйтесь с вашим сетевым администратором).

Заключение

Сообщение об ошибке kex_exchange_identification: read: Operation timed out связано, в первую очередь, с проблемами установления безопасного соединения SSH с удалённым сервером из-за ограничений сети. Хотя решение с использованием HTTP является наиболее простым и эффективным в условиях корпоративной сети, для более продвинутых пользователей, которым необходимо использовать SSH, возможны другие пути обхода ограничений, такие как использование VPN или изменение конфигурации сервера. Убедитесь, что соблюдаете все правила и политики вашей организации, чтобы избежать возможных рисков.

Оцените материал
Добавить комментарий

Капча загружается...