¿Cómo funciona tcp-keepalive en ssh?

Pregunta:

Estoy tratando de codificar un script de shell que usa una conexión ssh para hacer "latidos". Quiero terminar el lado del cliente y del servidor de esa conexión después de un cierto tiempo de espera (después de que la conexión se interrumpe).

Lo que encontré hasta ahora:

  • TCPKeepAlive sí / no para ssh y sshd
  • ClientAliveCountMax para sshd
  • ClientAliveInterval para sshd
  • ServerAliveCountMax para ssh
  • ServerAliveInterval para ssh

Para cambiar "ClientAliveCountMax" tendría que modificar sshd_config en cada máquina de destino (esta opción está deshabilitada por defecto).

Entonces, mi pregunta es: ¿puedo usar "TCPKeepAlive" para mis propósitos también (sin cambiar nada más en las máquinas de origen / destino)?

El sistema operativo de destino es SLES11 SP2, pero no creo que sea relevante aquí.

Respuesta:

Probablemente desee utilizar la configuración de ServerAlive para esto. No requieren ninguna configuración en el servidor y se pueden configurar en la línea de comandos si lo desea.

ssh -o ServerAliveInterval=5 -o ServerAliveCountMax=1 $HOST

Esto enviará un mensaje ssh keepalive cada 5 segundos, y si llega el momento de enviar otro keepalive, pero no se recibió una respuesta al último, la conexión se interrumpe.

La diferencia crítica entre ServerAliveInterval y TCPKeepAlive es la capa en la que operan.

  • TCPKeepAlive opera en la capa TCP. Envía un paquete TCP ACK vacío. Los cortafuegos pueden configurarse para ignorar estos paquetes, por lo que si pasa por un cortafuegos que descarta las conexiones inactivas, es posible que estas no mantengan viva la conexión.
  • ServerAliveInterval opera en la capa ssh. En realidad, enviará datos a través de ssh, por lo que el paquete TCP tiene datos cifrados y un firewall no puede decir si es un paquete activo o legítimo, por lo que funcionan mejor.

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım