¿Qué hace realmente ServerAliveCountMax en SSH?
Estoy tratando de asegurarme de que cuando me conecto a mi servidor a través de SSH, la conexión permanezca abierta durante un largo período de tiempo en lugar de que la conexión se apague después de un corto período de inactividad. Este es el ejemplo
Host *
ServerAliveInterval 60
ServerAliveCountMax 2
Escuché de una fuente que la configuración anterior siempre enviará una respuesta al servidor cada 60 segundos siempre que el servidor reciba esa respuesta. Sin embargo, si por alguna razón la respuesta no llega al servidor, intentará enviar otro mensaje. Si ese mensaje también falla, cerrará la conexión. (Siento que esto está mal)
La segunda y la tercera fuente embargo dicen algo diferente. Afirman que se enviará un mensaje al servidor cada 60 segundos si hay un período de inactividad, pero solo enviará 2 solicitudes y luego cerrará la conexión.
Entonces, ¿qué hace exactamente ServerAliveCountMax?

Intervalset para0deshabilitarla. Pero no está claro si se estableceMaxa0. ¿Enviaría infinitos ping vivos, o ninguno?Los mensajes vivos del servidor son útiles cuando un servidor SSH se ha configurado para cerrar conexiones después de un período de tiempo sin tráfico (los proveedores de alojamiento web compartido que ofrecen acceso SSH casi siempre hacen esto, por ejemplo). Establecer estas dos opciones envía un paquete cada
ServerAliveIntervalsegundo, por un máximo deServerAliveCountMaxveces, manteniendo así la sesión viva.Para responder a los comentarios sobre la incertidumbre de establecer cualquiera de las opciones
0, he leído el código fuente de laopensshimplementación, y esto es lo que veo ...La configuración
ServerAliveIntervalde0NO enviará los paquetes, pero mantendrá viva la sesión indefinidamente, suponiendo que la conexión no se interrumpe debido al tiempo de espera de TCP y que el servidor no está configurado para descartar clientes inactivos.Establecer
ServerAliveCountMaxen0tiene el mismo efecto que establecerServerAliveIntervalen0.Establecer un valor negativo o algo mayor que
INT_MAX(es decir, 2,147,483,647) dará como resultado un error de "valor entero ..." .Establecer
ServerAliveCountMaxentreINT_MAX/1000+1(es decir, 2,147,484) aINT_MAX(es decir, 2,147,483,647) también sería equivalente a establecer cualquier valor en0.Entonces, en esencia, la mayor cantidad de tiempos de espera que puede obtener (mientras aún envía los paquetes) es
INT_MAX/1000( es decir, 2,147,483). Con un tiempo de espera1y sin tráfico en las sesiones, eso te llevaría casi 25 días.Obviamente, otras implementaciones de SSH pueden tener resultados diferentes.
fuente