Comment puis-je empêcher une session SSH de suspendre dans le terminal OS X?

Lorsque je ferme mon MacBook avec une session SSH active dans Terminal et que je le réveille, l'invite ne répond plus.

Dans environ cinq minutes, il est dit

Write failed: Broken pipe

et se termine.

Cela se produit également lorsque je ne tape rien dans le terminal en une quinzaine de minutes environ.

Puis-je forcer OS X à:

  1. Gardez la connection SSH en vie pendant plus longtime possible
  2. Tuez-le immédiatement une fois qu'il ne répond plus

?

Pour maintenir la connection en vie , vous pouvez vérifier /etc/ssh_config la ligne où il indique ServerAliveInterval , qui vous indique à quelle fréquence (en secondes) votre ordinateur va envoyer un package null pour maintenir la connection en vie. Si vous avez un 0 là-dedans, cela indique que votre ordinateur ne tente pas de maintenir la connection en vie (il est désactivé), sinon il vous indique à quelle fréquence (en secondes) il envoie le package susmentionné. Essayez de mettre 120 ou 240, s'il tue encore votre connection, vous pouvez aller plus bas, peut-être à 5, si avec ce numéro cela n'arrive pas, peut-être que c'est votre routeur qui décharge la connection à la memory libre.

Pour le tuer quand il se raccroche , vous pouvez utiliser le caractère d'échappement ssh:

 ~. 

C'est-à-dire, appuyez sur la touche et ensuite sur la période, si cela ne fonctionne pas, appuyez sur Entrée avant d'appuyer sur celle-ci, qui tue la connection immédiatement.

Vous pouvez:

Configurez votre système, à l'échelle du système, pour toutes les connections En éditant: / etc / ssh / ssh_config Et ajoutez la ligne:

 ServerAliveInterval 10 

Ou, par server ~ / .ssh / config

 Host keepsdroppingme.com ServerAliveInterval 10 

Ce que cela apporte essentiellement, il envoie constamment un package vivant, toutes les 10 secondes …

Vous pouvez également essayer d'utiliser le projet awesome Mosh . Il gérera gracieusement les pertes de réseau, les machines allant au sumil, etc., et rétablissez la connection quand vous avez un réseau de travail à nouveau.

Une autre solution plus honorable consiste à utiliser tmux sur la machine distante. Dans ce cas, vous pouvez toujours avoir un tuyau brisé, mais si vous reconnectez votre shell et que les applications seront en attente tout comme vous les avez quitté.

Les différentes réponses ici sont en conflit concernant le path exact des files de configuration. Peut-être est-il différent dans différents templates? Je suggère de lire les pages man sur votre système!

Dans man ssh (1) , searchz le text: config . Sur mon système, j'ai le choix entre les files de configuration de l'user ou du système (et les paths sont bizarrement différents).

Dans man ssh_config (5) , searchz le text: en vie . Sur mon système, il me semble que je dois configurer ServerAliveInterval et ServerAliveCountMax .

Ce qui a fonctionné pour moi, sur MacOS 10.12 Sierra, consiste à mettre les deux lignes suivantes dans ~ / .ssh / config:

 ServerAliveInterval 20 ServerAliveCountMax 180 

Maintenant, je peux ssh à mon server Ubuntu 16.04 sans déconnection pendant 20 * 180 secondes = 1 heure. J'ai fait ma journée!

Ajoutez ces deux lignes à /etc/ssh/ssh_config :

 ServerAliveInterval 60 TCPKeepAlive yes