Desenvolvedores

SSH e Git esgotam o tempo de espera no Mac

SSH e Git precisam de uma conexão TCP funcional com o servidor. Uma rede que bloqueia a porta 22, um caminho IPv6 com falha ou um proxy podem impedi-los.

Aplica-se a: todas as versões atuais do macOS com OpenSSH e Git instalados pelo macOS ou Homebrew.Verificado: 29 de outubro de 2026

Sintomas

  • git push ou git clone espera e depois mostra “Operation timed out”.
  • ssh mostra “Connection timed out” em uma rede, mas funciona em outra.
  • Uma sessão SSH trava após alguns minutos ociosos.
  • Remotos Git HTTPS funcionam, mas remotos SSH não.

Possíveis causas

  • A porta 22 está bloqueada. Algumas redes corporativas, de hotéis e públicas bloqueiam SSH. O GitHub informa que firewalls às vezes recusam conexões SSH.
  • Um caminho IPv6 com falha. O Mac tenta IPv6 primeiro. Se o IPv6 não funcionar, a conexão espera.
  • Conexões ociosas são encerradas. Um roteador ou firewall pode interromper uma conexão que não envia dados por algum tempo.
  • Um proxy é necessário. O Git via HTTPS em uma rede corporativa pode precisar de http.proxy ou de variáveis de proxy.

Como verificar

  1. Conecte com saída detalhada. As últimas linhas mostram onde a conexão para.

    ssh -vT git@github.com
  2. Teste apenas a porta TCP, com tempo limite de 5 segundos.

    nc -vz -G 5 github.com 22
  3. Tente usar apenas IPv4. Se funcionar, o problema está no caminho IPv6.

    ssh -4 -T git@github.com
  4. Teste o serviço SSH do GitHub na porta 443.

    ssh -T -p 443 git@ssh.github.com
  5. Mostre o ajuste de proxy do Git e suas variáveis de proxy.

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

Como corrigir

  1. Se a porta 22 estiver bloqueada, use SSH pela porta 443 para o GitHub. Adicione este bloco a ~/.ssh/config.

    Host github.com
        Hostname ssh.github.com
        Port 443
        User git
  2. Se o IPv6 falhar, use IPv4 para esse host. Adicione AddressFamily inet ao bloco dele em ~/.ssh/config.

  3. Para manter sessões ociosas abertas, envie uma mensagem a cada 60 segundos. Adicione ServerAliveInterval 60 ao bloco do host.

  4. Para evitar esperas longas, adicione ConnectTimeout 10 ao bloco do host.

  5. Para repositórios remotos HTTPS atrás de um proxy, configure o proxy do Git.

    git config --global http.proxy http://proxy.example.com:8080
  6. Como teste, use a URL HTTPS do repositório em vez da URL SSH.

Com o Kilobat

  1. A verificação de conexão do Kilobat testa IPv4 e IPv6 separadamente para identificar problemas no caminho IPv6.

    kilobat why github.com
  2. Veja as conexões abertas de um processo.

    kilobat destinations --pid 12345

Perguntas

Por que ssh -4 funciona quando ssh sozinho não funciona?

O Mac tentou IPv6 primeiro, mas o caminho IPv6 não funcionou. Com -4, o ssh usa apenas IPv4.

O que faz ServerAliveInterval?

O ssh envia uma mensagem pela conexão após esse número de segundos sem dados. O padrão é 0, que não envia mensagens.

Fontes

Verificado em 29 de outubro de 2026.