Estoy tratando de codificar un script de shell que utiliza una conexión ssh para hacer "latidos". Quiero terminar el lado del cliente y el servidor de esa conexión después de un cierto tiempo de espera (después de que la conexión se caiga).
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 el sshd_config en cada máquina de destino (esta opción está deshabilitada de forma predeterminada).
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í.
ControlMaster
opción y está utilizando conexiones esclavas?Respuestas:
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 comando si lo desea.
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 termina.
La diferencia crítica entre
ServerAliveInterval
yTCPKeepAlive
es la capa en la que operan.TCPKeepAlive
opera en la capa TCP. Envía un paquete vacío TCP ACK. Los cortafuegos se pueden configurar para ignorar estos paquetes, por lo que si atraviesa un cortafuegos que desconecta las conexiones inactivas, es posible que estas no mantengan la conexión activa.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 determinar si es un paquete activo o un paquete legítimo, por lo que funcionan mejor.fuente
Seconds between keepalives
a 1800 en Configuración | Conexión.La
TCPKeepAlive
opción es en realidad un método muy diferente para mantener las conexiones vivas de las opciones similares a ClientAlive o ServerAlive.Son por BSD página del manual de SSH , se expresa que:
La
TCPKeepAlive
asegurarse de si el sistema debe enviar mensajes de mantenimiento de conexión TCP al otro lado. La opción predeterminada siempre está habilitada.Si está utilizando
ClientAliveInterval
, puede deshabilitarTCPKeepAlive
. Esta opción enviará un mensaje a través del canal encriptado para solicitar una respuesta del cliente (el valor predeterminado es 0, por lo que no se envían mensajes al cliente) yClientAliveCountMax
establece el número de mensajes vivos del cliente antes de que sshd desconecte al cliente, al finalizar el sesión.fuente