¿Cómo puedo evitar que una sesión SSH se cuelgue en OS X Terminal?

83

Cuando cierro mi MacBook con una sesión activa de SSH en la Terminal y luego la reactivo, el indicador no responde.

En unos cinco minutos dice

  

Write failed: Broken pipe

y termina.

Esto también sucede cuando no escribo nada en la Terminal en unos quince minutos.

¿Puedo obligar a OS X a:

  1. Mantenga la conexión SSH viva durante el mayor tiempo posible
  2. Mátalo inmediatamente una vez que deje de responder

?

    
pregunta Dan 13.01.2012 - 21:29

6 respuestas

105

Para mantener viva la conexión , puedes verificar en /etc/ssh/ssh_config la línea donde dice ServerAliveInterval , que te dice con qué frecuencia (en segundos) tu computadora enviará un paquete nulo a mantener la conexión viva Si tiene un 0 en allí, eso indica que su computadora no está tratando de mantener viva la conexión (está desactivada), de lo contrario, le informa con qué frecuencia (en segundos) está enviando el paquete mencionado anteriormente. Intente colocar 120 o 240, si aún está matando su conexión, puede ir más bajo, quizás a 5, si con ese número no ocurre, tal vez sea su enrutador quien esté descargando la conexión a la memoria libre.

Para matarlo cuando se cuelga , puedes usar el carácter de escape ssh:

~.

Es decir, presione la tilde y luego el período; si no funciona, presione Entrar antes de presionar eso, lo que anulará la conexión de inmediato.

    
respondido por el Jorge Núñez 13.01.2012 - 21:58
17

Puedes:

Configure su sistema, en todo el sistema, para todas las conexiones Al editar: / etc / ssh / ssh_config Y añada la línea:

ServerAliveInterval 10

O, por servidor ~/.ssh/config

Host keepsdroppingme.com
   ServerAliveInterval 10

Lo que esto básicamente hace es mantener el paquete en vivo, cada 10 segundos ...

    
respondido por el Aleksandar Pavić 17.12.2015 - 19:01
8

También puedes intentar usar el impresionante proyecto mosh . Manejará con gracia las pérdidas de la red, las máquinas que se duermen, etc. y restaurará la conexión cuando tengas una red en funcionamiento nuevamente.

Otra solución más tradicional es usar tmux en la máquina remota. En ese caso, es posible que aún tengas una tubería rota, pero si vuelves a conectar tu shell y las aplicaciones estarán esperando justo cuando las dejaste.

    
respondido por el BinaryPaean 07.11.2013 - 03:12
3

Las diversas respuestas aquí están en conflicto con respecto a la ruta exacta a los archivos de configuración. Tal vez sea diferente en diferentes unixes? ¡Sugiero leer las páginas del manual en tu sistema!

En man ssh (1) , busca el texto: config . En mi sistema, puedo elegir entre los archivos de configuración de todo el sistema o de este usuario (y las rutas son extrañamente diferentes).

En man ssh_config (5) , busca el texto: vivo . En mi sistema, parece que necesito configurar tanto ServerAliveInterval como ServerAliveCountMax .

Lo que funcionó para mí, en macOS 10.12 Sierra, es poner las siguientes dos líneas en ~ / .ssh / config:

ServerAliveInterval 20
ServerAliveCountMax 180

Ahora puedo conectarme a mi servidor Ubuntu 16.04 sin desconectar durante 20 * 180 segundos = 1 hora. ¡Hizo mi día!

    
respondido por el Jerry Krinock 09.09.2016 - 03:15
2

Volver a conectar automáticamente ssh después de la interrupción de la suspensión o wifi

  1. Instala autossh desde MacPorts o Homebrew: brew install autossh

  2. Abre la Terminal y ejecuta autossh -M 20000 -f [SSH ARGUMENTS GO HERE]

  3. Desconecta tu wifi o pon tu Mac en suspensión.

  4. Cuando vuelva a conectarse a wifi, la sesión ssh se volverá a conectar automáticamente.

Ssh automáticamente después de iniciar sesión

Jon Stacey escribió una publicación de blog sobre la activación automática de una sesión de ssh cuando inicias sesión.

  1. Instala autossh desde MacPorts o Homebrew: brew install autossh

  2. Cree un flujo de trabajo de Automator con un script de bash.

  • Vaya a elementos de inicio de sesión en Preferencias del sistema .
  • Agregue su flujo de trabajo de Automator a elementos de inicio de sesión .
  •     
    respondido por el Kamil Slowikowski 31.10.2017 - 21:50
    1

    Agregue estas dos líneas a /etc/ssh/ssh_config :

    ServerAliveInterval 60
    TCPKeepAlive yes
    
        
    respondido por el MOHRE 09.08.2016 - 19:23

    Lea otras preguntas en las etiquetas