Разработчикам

SSH и Git не дожидаются ответа на Mac

SSH и Git нужно рабочее TCP-подключение к серверу. Сеть, блокирующая порт 22, неработающий путь IPv6 или прокси могут его не пропустить.

Применимо к: всем актуальным версиям macOS с OpenSSH и Git, которые устанавливает macOS или Homebrew.Проверено: 29 октября 2026 г.

Симптомы

  • git push или git clone долго ждёт, а затем выдаёт «Operation timed out».
  • ssh выдаёт «Connection timed out» в одной сети, но работает в другой.
  • Сеанс SSH зависает после нескольких минут простоя.
  • Удалённые репозитории Git по HTTPS работают, а по SSH — нет.

Вероятные причины

  • Порт 22 заблокирован. Некоторые корпоративные, гостиничные и публичные сети блокируют SSH. GitHub отмечает, что брандмауэры иногда отклоняют подключения SSH.
  • Неработающий путь IPv6. Mac сначала пробует IPv6. Если IPv6 не работает, подключение повисает в ожидании.
  • Простаивающие подключения закрываются. Роутер или брандмауэр может разорвать подключение, по которому какое-то время не идут данные.
  • Нужен прокси. Git по HTTPS в корпоративной сети может требовать http.proxy или переменных прокси.

Как проверить

  1. Подключитесь с подробным выводом. Последние строки покажут, где останавливается подключение.

    ssh -vT git@github.com
  2. Проверьте только TCP-порт, с тайм-аутом 5 секунд.

    nc -vz -G 5 github.com 22
  3. Попробуйте только IPv4. Если так работает, проблема в пути IPv6.

    ssh -4 -T git@github.com
  4. Проверьте службу SSH GitHub на порту 443.

    ssh -T -p 443 git@ssh.github.com
  5. Покажите настройку прокси в Git и свои переменные прокси.

    git config --get http.proxy
    env | grep -i proxy

Как исправить

  1. Если порт 22 заблокирован, используйте для GitHub SSH через порт 443. Добавьте этот блок в ~/.ssh/config.

    Host github.com
        Hostname ssh.github.com
        Port 443
        User git
  2. Если IPv6 не работает, используйте для этого хоста IPv4. Добавьте AddressFamily inet в его блок в ~/.ssh/config.

  3. Чтобы простаивающие сеансы не закрывались, отправляйте сообщение каждые 60 секунд. Добавьте ServerAliveInterval 60 в блок хоста.

  4. Чтобы избежать долгого ожидания, добавьте ConnectTimeout 10 в блок хоста.

  5. Для удалённых репозиториев по HTTPS за прокси задайте прокси для Git.

    git config --global http.proxy http://proxy.example.com:8080
  6. Для проверки используйте URL репозитория по HTTPS вместо URL по SSH.

С Kilobat

  1. Проверка подключения Kilobat проверяет IPv4 и IPv6 по отдельности, так что про неработающий путь IPv6 вы получите ясный ответ.

    kilobat why github.com
  2. Посмотрите открытые подключения одного процесса.

    kilobat destinations --pid 12345

Вопросы

Почему ssh -4 работает, а обычный ssh — нет?

Mac сначала попробовал IPv6, а путь IPv6 не работает. С -4 ssh использует только IPv4.

Что делает ServerAliveInterval?

ssh отправляет сообщение через подключение, если за указанное число секунд не было данных. По умолчанию 0 — сообщения не отправляются.

Источники

  • GitHub Docs: Using SSH over the HTTPS port
  • ssh(1) и ssh_config(5), страница man из macOS 27.2
  • nc(1), страница man из macOS 27.2
  • git-config(1), http.proxy, man-страница в составе macOS 27.2 (Git 2.56)

Источники проверены 29 октября 2026 г. Man-страницы — те, что установлены вместе с macOS; откройте любую командой man <name> в Терминале.