2012-05-19 8 views
20

¿Es posible mantener activa la sesión SSH mientras duerme la computadora? Cuando pongo mi Mac (Lion) a dormir por un corto período de tiempo y luego lo despierto, la sesión sigue viva, pero si lo dejo durante la noche, la conexión de sesión está cerrada. conjunto¿Mantiene viva la sesión SSH mientras duerme la computadora?

He intentado:

 
ClientAliveInterval 3600 
ClientAliveCountMax 10 

mismo resultado

Por qué sesión de "sobrevivir" durante un corto período de tiempo? ¿Cómo puedo controlar este tiempo de espera?

Respuesta

13

he encontrado la respuesta que depende de la configuración de mantenimiento de conexión TCP:

Para la lista de configuración TCP disponibles (FreeBSD 4.8 un arriba y 5.4):

sysctl -A | grep net.inet.tcp 
  • net.inet.tcp.keepidle - Cantidad de tiempo, en milisegundos, que la conexión (TCP) debe estar inactivo antes pr keepalive obes (si está habilitado) son enviados.

  • net.inet.tcp.keepintvl - El intervalo, en milisegundos, entre las sondas Keepalive enviadas a máquinas remotas. Después de enviar las sondas TCPTV_KEEPCNT (predeterminado 8), sin respuesta, la conexión (TCP) se interrumpe.

  • net.inet.tcp.always_keepalive - Supongamos que SO_KEEPALIVE se establece en todas las conexiones TCP, el kernel enviará periódicamente un paquete al host remoto para verificar que la conexión aún está activa.

Por lo tanto la fórmula para calcular el máximo TCP tiempo de conexión inactiva está siguiendo:

net.inet.tcp.keepidle + (net.inet.tcp.keepintvl x 8) 

el resultado es en milisegundos. Por lo tanto, mediante el establecimiento de

net.inet.tcp.keepidle = 10000 net.inet.tcp.keepintvl = 5000 net.inet.tcp.always_keepalive = 1 (must be 1 always) 

el sistema va a desconectar una llamada cuando la conexión TCP está muerto para: 10000 + (5000 x 8) = 50000 milisegundos (50 segundos).Para hacer que el sistema recuerde esta configuración al inicio, debe añadirlos a /etc/sysctl.conf archivo

+2

¿Esto se aplicará en el lado del servidor? – netvope

+0

no he probado todavía, pero creo que sí, del lado del servidor: [TCP Keepalive] (http://jampad.net/Library/tcpipprot/ch17.html): Si el usuario para establecer la conexión, haga algo de trabajo, luego simplemente apague la computadora al final del día, sin desconectarse, quedará una conexión medio abierta. Si el cliente desaparece, dejando la conexión medio abierta en el extremo del servidor, y el servidor está esperando algunos datos del cliente, el servidor esperará por siempre. La característica keepalive está destinada a detectar estas conexiones semiabiertas desde el lado del servidor. –

+0

¿es posible tener un proxy para mi sistema para dormir que pueda seguir enviando paquetes al servidor? De esta manera, la sesión podría mantenerse viva incluso después de dormir. – sudeepdino008

1

A veces, las sesiones se cierran cuando no se transmiten datos. Dejar htop abierto generalmente impide que se cierren mis conexiones ssh, así como proporcionar información útil en tiempo real.

Keepalive debería hacer lo mismo. Quizás puedas intentar reducir el intervalo (la demora entre dos keepalives) a algo así como 60, ver si cambia algo.

+0

Si la computadora no está durmiendo, las sesiones de SSH están bien, pero quiero volver a usar la misma sesión después de que se despierte después de dormir. Funciona por poco tiempo de sueño, pero no por mucho tiempo. –

+1

Probablemente no pueda mantener la sesión de ssh abierta durante la hibernación; no se enviará keepalive si la computadora está durmiendo. La pantalla es el camino a seguir: http://www.gnu.org/software/screen/ – Gyscos

6

Si desea una solución elegante para mantener viva una sesión remota, debe verificar screen utitity. Al utilizar esta utilidad, puede mantener sus programas remotos en ejecución incluso después de cerrar sesión o apagar su computadora. Luego puede volver a conectar su sesión screen disponible más tarde.

La pantalla requiere algo de tiempo para aprender los conceptos básicos, pero cuando tenga el control, verá qué tan poderosa es.

Puede comprobar este enlace para un tutorial sobre el uso de la pantalla: http://www.thegeekstuff.com/2010/07/screen-command-examples/

+0

De hecho, es una solución elegante, pero no responde mi pregunta. Gracias por su sugerencia, lo intentaré. –

+5

Prefiero la alternativa más reciente [tmux] (https://tmux.github.io/). –

+0

http://bphogan.com/2012/06/15/tmux/ –

5

Otra posible solución es mosh, que no es exactamente SSH pero ¿mantener su conexión concha viva cuando el equipo se va a dormir, o incluso después de cambiar Direcciones IP.

+3

El problema con 'mosh' es que requiere una gran variedad de puertos UDP para abrirse en el firewall. Este es un problema para mucha gente. – e40

+0

técnicamente, es posible 'sshuttle' tráfico UDP sobre sesión ssh, y luego iniciar 'mosh' – danbst

2

Otra solución es usar autossh, que básicamente supervisa su sesión ssh y se reconecta tan pronto como se interrumpe (por ejemplo, después de un ciclo de suspensión, pero también si pierde una conexión WiFi por un tiempo, por ejemplo). Esto funciona especialmente bien para los puertos reenviados/túneles ssh.

Aquí hay un tutorial: http://linuxaria.com/howto/permanent-ssh-tunnels-with-autossh.

Cuestiones relacionadas