
Usando ssh, inicio sesión en otro sistema y ejecuto scripts allí que crean nuevas máquinas y realizo algunas configuraciones. Tarda alrededor de 7-8 horas. Entonces, lo que sucedió es que la conexión ssh sigue cayendo y siempre obtengo un tiempo de espera si la ejecución del script no es exitosa.
Ahora estoy usando este argumento junto con la conexión ssh:
ssh -o ServerAliveInterval=60 user@host ....
Este ssh se genera varias veces. El problema es que después de algunas conexiones ssh, aparece el error:
too many logins of user
y las conexiones ssh posteriores se cierran justo después de iniciar sesión correctamente.
¿Así es el comportamiento delServidorAliveInterval, eso mantiene viva la sesión de inicio de sesión del usuario ssh en la máquina remota incluso después de que finaliza el trabajo de ssh y es por eso que mis inicios de sesión adicionales se desconectan.
Respuesta1
No creo que esto mantenga viva una sesión si su cliente perdió la conexión. Probablemente sean esas opciones del lado del servidor:
ClienteAliveCountMax
Establece el número de mensajes activos del cliente que pueden enviarse sin que sshd(8) reciba ningún mensaje del cliente. Si se alcanza este umbral mientras se envían mensajes de cliente activo, sshd desconectará el cliente y finalizará la sesión. Es importante tener en cuenta que el uso de mensajes de cliente activo es muy diferente de TCPKeepAlive. Los mensajes activos del cliente se envían a través del canal cifrado y, por lo tanto, no serán suplantables. La opción TCP keepalive habilitada por TCPKeepAlive es falsificada. El mecanismo de cliente activo es valioso cuando el cliente o el servidor dependen de saber cuándo una conexión se ha vuelto inactiva.
El valor predeterminado es 3. Si ClientAliveInterval se establece en 15 y ClientAliveCountMax se deja en el valor predeterminado, los clientes SSH que no respondan se desconectarán después de aproximadamente 45 segundos.
IntervaloClienteVivo
Establece un intervalo de tiempo de espera en segundos después del cual, si no se han recibido datos del cliente, sshd(8) enviará un mensaje a través del canal cifrado para solicitar una respuesta del cliente. El valor predeterminado es 0, lo que indica que estos mensajes no se enviarán al cliente.
Quizás la verdadera solución a su problema radique en utilizar un multiplexor de terminal como screen o tmux. Permiten que su inicio de sesión y los programas en ejecución duren incluso si se cae la conexión. Puede volver a conectarse al terminal en cualquier momento posterior, incluida la salida de los programas en ejecución. También puedes usarlo para tener más de un terminal en tu única conexión ssh. Dado que su servidor parece limitar sus sesiones ssh, esto también podría resultar útil. puedes encontrar unointroducción a la pantalla aquí, pero hay muchos otros por ahí.
Respuesta2
Entonces, ¿es el comportamiento de
ServerAliveInterval
, lo que mantiene viva la sesión de inicio de sesión del usuario ssh en la máquina remota incluso después de que finaliza el trabajo de ssh y es por eso que mis inicios de sesión adicionales se desconectan?
No. Esto consiste en enviar mensajes keepalive que verifican su conexión y evitan desconexiones automáticas en SSH o en niveles inferiores. Si desea iniciar scripts de larga duración, debe utilizar o nohup
en el lado remoto. Mantendrá sus scripts ejecutándose incluso después de desconectarlos y con los dos segundos, podrá volver a conectar los terminales existentes.screen
tmux
Respuesta3
Probablemente reciba estos errores después de habilitarlos ServerAliveInterval=60
porque sus conexiones permanecen activas. Su patrón de conexiones/comandos ssh a ese servidor está acumulando más conexiones simultáneas de las que el servidor está configurado para permitir.
Sus conexiones solían morir, lo que hacía que el recuento de conexiones simultáneas fuera menor, y el servidor estaba contento con eso (no había conexiones rechazadas), pero usted no estaba contento.
Descubra la configuración de ese servidor con respecto al recuento máximo de conexiones simultáneas y manténgase dentro de ese límite o negocie con el administrador del servidor para aumentar el límite para usted (o tal vez incluso para todos).