Développeurs

SSH et Git expirent sur un Mac

SSH et Git ont besoin d’une connexion TCP fonctionnelle vers le serveur. Un réseau qui bloque le port 22, un chemin IPv6 défaillant ou un proxy peut les en empêcher.

S’applique à : toutes les versions actuelles de macOS, avec l’OpenSSH et le Git installés par macOS ou Homebrew.Vérifié le 29 octobre 2026

Symptômes

  • git push ou git clone reste en attente, puis affiche « Operation timed out ».
  • ssh affiche « Connection timed out » sur un réseau, mais fonctionne sur un autre.
  • Une session SSH se fige après quelques minutes d’inactivité.
  • Les dépôts distants Git en HTTPS fonctionnent, mais pas ceux en SSH.

Causes probables

  • Le port 22 est bloqué. Certains réseaux d’entreprise, d’hôtel et publics bloquent SSH. GitHub indique que les coupe-feu refusent parfois les connexions SSH.
  • Un chemin IPv6 défaillant. Le Mac essaie d’abord IPv6. Si IPv6 ne fonctionne pas, la connexion reste en attente.
  • Les connexions inactives se ferment. Un routeur ou un coupe-feu peut couper une connexion qui n’envoie aucune donnée pendant un certain temps.
  • Un proxy est nécessaire. Git en HTTPS sur un réseau d’entreprise peut nécessiter http.proxy ou des variables de proxy.

Comment vérifier

  1. Connectez-vous avec une sortie détaillée. Les dernières lignes montrent où la connexion s’arrête.

    ssh -vT git@github.com
  2. Testez le port TCP seul, avec un délai d’expiration de 5 secondes.

    nc -vz -G 5 github.com 22
  3. Essayez en IPv4 uniquement. Si cela fonctionne, le problème vient du chemin IPv6.

    ssh -4 -T git@github.com
  4. Testez le service SSH de GitHub sur le port 443.

    ssh -T -p 443 git@ssh.github.com
  5. Affichez le réglage de proxy de Git et vos variables de proxy.

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

Comment corriger

  1. Si le port 22 est bloqué, utilisez SSH sur le port 443 pour GitHub. Ajoutez ce bloc à ~/.ssh/config.

    Host github.com
        Hostname ssh.github.com
        Port 443
        User git
  2. Si IPv6 échoue, utilisez IPv4 pour cet hôte. Ajoutez AddressFamily inet à son bloc dans ~/.ssh/config.

  3. Pour garder ouvertes les sessions inactives, envoyez un message toutes les 60 secondes. Ajoutez ServerAliveInterval 60 au bloc de l’hôte.

  4. Pour éviter les longues attentes, ajoutez ConnectTimeout 10 au bloc de l’hôte.

  5. Pour les dépôts distants HTTPS derrière un proxy, configurez le proxy de Git.

    git config --global http.proxy http://proxy.example.com:8080
  6. Pour tester, utilisez l’URL HTTPS du dépôt au lieu de l’URL SSH.

Avec Kilobat

  1. La vérification de la connexion de Kilobat teste IPv4 et IPv6 séparément : un chemin IPv6 défaillant obtient ainsi une réponse claire.

    kilobat why github.com
  2. Affichez les connexions ouvertes d’un processus.

    kilobat destinations --pid 12345

Questions

Pourquoi ssh -4 fonctionne-t-il alors que ssh seul échoue ?

Le Mac a d’abord essayé IPv6, et le chemin IPv6 ne fonctionnait pas. Avec -4, ssh utilise uniquement IPv4.

À quoi sert ServerAliveInterval ?

ssh envoie un message dans la connexion après ce nombre de secondes sans données. La valeur par défaut est 0, qui n’en envoie aucun.

Sources

Sources vérifiées le 29 octobre 2026. Les pages man sont celles installées avec macOS ; ouvrez-en une avec man <name> dans Terminal.