Tengo un servidor que ejecuta Debian y sshd en él, y en caso de que necesite reiniciar el servidor, mi sesión SSH se bloquea en el lado del cliente hasta que se agote el tiempo de espera de TCP. Supongo que esto se debe a que cuando sshd
se termina, no cierra explícitamente las sesiones SSH abiertas al host. ¿Qué debo hacer para sshd
desconectar primero a todos y luego terminar de forma normal? Hasta ahora no veo un parámetro man sshd_config
que esté relacionado con el comportamiento cerrado.
13
Respuestas:
Cuando apaga o reinicia su sistema,
systemd
intenta detener todos los servicios lo más rápido posible. Eso implica derribar la red y terminar todos los procesos que aún están vivos, generalmente en ese orden. Entonces, cuando systemd mata los procesos SSH bifurcados que manejan sus sesiones SSH, la conexión de red ya está deshabilitada y no tienen forma de cerrar la conexión del cliente con gracia.Su primer pensamiento podría ser simplemente matar todos los procesos SSH como el primer paso durante el apagado, y hay bastantes archivos de servicio systemd que hacen exactamente eso.
Pero hay, por supuesto, una solución más limpia (cómo se "supone" que hacer):
systemd-logind
.systemd-logind
realiza un seguimiento de las sesiones de usuario activas (locales y SSH) y asigna todos los procesos generados dentro de ellos a los llamados "sectores". De esa manera, cuando el sistema se apaga, systemd puede SIGTERMAR todo lo que se encuentra dentro de los segmentos del usuario (que incluye el proceso SSH bifurcado que está administrando una sesión en particular) y luego continuar apagando los servicios y la red.systemd-logind
requiere un módulo PAM para recibir notificaciones de nuevas sesiones de usuario ydbus
deberá usarlologinctl
para verificar su estado, así que instale ambos:Asegúrese de que
/etc/ssh/sshd_config
realmente va a utilizar el módulo conUsePAM yes
.fuente
reboot
hacerlo, realice unshutdown -r
retraso predeterminado de 1 minuto, dejándole tiempo para cerrar la sesión SSH.Esto es algo que debe configurar en el lado del cliente, no en el lado del servidor. Edite su
~/.ssh/config
para contenerEsto significa que después de 15 segundos de inactividad, su cliente enviará un mensaje al servidor. Si no obtiene ninguna respuesta, lo intentará nuevamente hasta 5 veces, y cuando todavía no obtenga una respuesta, cerrará la sesión.
fuente
Este comportamiento se informa en este error de Debian , solo necesita configurar correctamente los scripts de apagado enviados con el paquete porque, automáticamente, no se copian de manera predeterminada:
fuente
Puede especificar las opciones de las que habló Jenny D en su respuesta solo para un comando ssh, como
si haces eso a menudo, puedes escribirlo.
fuente
Funciona para mí con lshd. Entonces la solución sería
fuente
Lamentablemente, serverfault no me dejó responder en hilo por muy pocos puntos desde hace años. Pero no necesito enviar spam en otros blogs para desbloquear ^^ ... así que como respuesta dedicada:
Como mencionó Rfraile
trabajos. Para usarlo sin reiniciar la instancia / servidor, debe realizar tareas adicionales:
Por lo tanto, el servicio se registra e inicia y systemd necesita detenerlo para reiniciar / apagar.
fuente