Desarrolladores

SSH y Git agotan el tiempo de espera en un Mac

SSH y Git necesitan una conexión TCP que funcione hasta el servidor. Una red que bloquea el puerto 22, una ruta IPv6 rota o un proxy pueden impedirlo.

Se aplica a: todas las versiones actuales de macOS, con el OpenSSH y el Git que instalan macOS o Homebrew.Revisado: 29 de octubre de 2026

Síntomas

  • git push o git clone se queda esperando y luego muestra «Operation timed out».
  • ssh muestra «Connection timed out» en una red, pero funciona en otra.
  • Una sesión SSH se congela tras unos minutos de inactividad.
  • Los remotos Git por HTTPS funcionan, pero los remotos SSH no.

Causas probables

  • El puerto 22 está bloqueado. Algunas redes de empresas, de hoteles y públicas bloquean SSH. GitHub indica que los firewalls a veces rechazan las conexiones SSH.
  • Una ruta IPv6 rota. El Mac prueba primero IPv6. Si IPv6 no funciona, la conexión se queda esperando.
  • Las conexiones inactivas se cierran. Un router o un firewall puede cortar una conexión que lleva un tiempo sin enviar datos.
  • Hace falta un proxy. Git por HTTPS en una red de empresa puede necesitar http.proxy o variables de proxy.

Cómo comprobarlo

  1. Conéctate con salida detallada. Las últimas líneas muestran dónde se detiene la conexión.

    ssh -vT git@github.com
  2. Prueba solo el puerto TCP, con un tiempo de espera de 5 segundos.

    nc -vz -G 5 github.com 22
  3. Prueba solo con IPv4. Si así funciona, el problema es la ruta IPv6.

    ssh -4 -T git@github.com
  4. Prueba el servicio SSH de GitHub en el puerto 443.

    ssh -T -p 443 git@ssh.github.com
  5. Muestra el ajuste de proxy de Git y tus variables de proxy.

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

Cómo solucionarlo

  1. Si el puerto 22 está bloqueado, usa SSH por el puerto 443 para GitHub. Añade este bloque a ~/.ssh/config.

    Host github.com
        Hostname ssh.github.com
        Port 443
        User git
  2. Si IPv6 falla, usa IPv4 para ese host. Añade AddressFamily inet a su bloque en ~/.ssh/config.

  3. Para mantener abiertas las sesiones inactivas, envía un mensaje cada 60 segundos. Añade ServerAliveInterval 60 al bloque del host.

  4. Para evitar esperas largas, añade ConnectTimeout 10 al bloque del host.

  5. Para remotos HTTPS detrás de un proxy, configura el proxy de Git.

    git config --global http.proxy http://proxy.example.com:8080
  6. Como prueba, usa la URL HTTPS del repositorio en lugar de la URL SSH.

Con Kilobat

  1. La comprobación de la conexión de Kilobat prueba IPv4 e IPv6 por separado, así que una ruta IPv6 rota recibe una respuesta clara.

    kilobat why github.com
  2. Mira las conexiones abiertas de un proceso.

    kilobat destinations --pid 12345

Preguntas

¿Por qué funciona ssh -4 y ssh a secas no?

El Mac probó primero IPv6, y la ruta IPv6 no funcionaba. Con -4, ssh usa solo IPv4.

¿Qué hace ServerAliveInterval?

ssh envía un mensaje por la conexión tras ese número de segundos sin datos. El valor predeterminado es 0, que no envía ninguno.

Fuentes

Fuentes revisadas el 29 de octubre de 2026. Las páginas man son las que se instalan con macOS; abre una con man <name> en Terminal.