Después de enviar el comando de apagado, la sesión ssh no termina

12

Cada vez que envío el comando para apagar o reiniciar mis servidores Debian, mi shell se queda colgando y no responde (no puede escribir ningún comando).

ingrese la descripción de la imagen aquí

Realizar la misma acción en Ubuntu da como resultado que la sesión se cierre con gracia para que no quede un terminal atado colgado allí. ¿Hay un paquete que necesito instalar o un cambio de configuración para poder obtener este mismo comportamiento en Debian?

Programador
fuente
¿ sudo shutdown -h nowOcurre el mismo comportamiento con (para apagar) y / o sudo reboot(para reiniciar)?
eyoung100
Sí, ocurre con esos también.
Programador
2
Nota: puede eliminar una de estas sesiones ssh bloqueadas escribiendo <enter>, tilde y punto (~.).
Kenster

Respuestas:

11

Esto funcionó para mí:

apt-get install libpam-systemd dbus

También asegúrese de tener UsePAM yesen su configuración ssh.

grep -i UsePAM /etc/ssh/sshd_config

Desafortunadamente, debe reiniciar para que la solución surta efecto ...

Explicaciones detalladas sobre serverfault .

mivk
fuente
Acabo de tener el mismo problema en ubuntu 16.04 para el que la solución anterior no funcionaba pero esta sí.
Programador
7

Parece que ese es un systemdproblema actualmente rastreado bajo el error # 751636 .

Cuando el host se apaga o reinicia, systemdpuede apagar la red antes de que mate la sesión ssh.

Hay un par de soluciones proporcionadas pero nada concreto:

  1. Utilizando acpid/acpi-support-basepara manejar los eventos de energía y agregue lo siguiente a la/etc/acpi/powerbtn-acpi-support.sh

    else
    -       # Normal handling.
    -       /sbin/shutdown -h -P now "Power button pressed"
    +
    +       if [ -x /bin/systemctl ] ; then
    +           echo "\nPower button pressed\nThe system is going down for system halt NOW!" |\
    +            /usr/bin/wall -n
    +           /bin/systemctl --force poweroff
    +       else
    +           # Normal handling.
    +           /sbin/shutdown -h -P now "Power button pressed"
    +       fi
    +
    fi
    

    y luego crea alias en tu ~/.bashrc:

    alias reboot='echo "The system is going down for system reboot NOW!" |\
    /usr/bin/wall -n ; /bin/systemctl --force reboot'
    
    alias poweroff='echo "The system is going down for system halt NOW!" |\
    /usr/bin/wall -n ; /bin/systemctl --force poweroff'
    
  2. Creando /etc/systemd/system/ssh-user-sessions.servicecon lo siguiente:

    [Unit]
    Description=Shutdown all ssh sessions before network
    After=network.target
    
    [Service]
    TimeoutStartSec=0
    Type=oneshot
    RemainAfterExit=yes
    ExecStart=/bin/true
    ExecStop=/usr/bin/killall sshd
    
neurona
fuente
es bueno saber que es un error conocido. Intenté la segunda solución, pero no parece funcionar para mí al enviar el comando de reinicio. Me aseguré de hacerlo ejecutable.
Programador
1
Vuelva a cargar el demonio systemd:, systemctl daemon-reloadtambién para activar el servicio systemd inmediatamente: systemctl start ssh-user-sessions.servicey para habilitar el servicio en el arranquesystemctl enable ssh-user-sessions.service
neurona
Ejecutar los primeros 2 comandos hizo el truco. Ejecutar el tercer comando resultó en: The unit files have no [Install] section. They are not meant to be enabled using systemctl.pero no parece ser necesario.
Programador
Sí, olvidé mencionar que el archivo de la Unidad puede incluir una "[Install]"sección, que contiene información de instalación para la unidad. Esta sección no se interpreta systemddurante el tiempo de ejecución. Se utiliza exclusivamente por los permitan y desactivar los comandos de la systemctlherramienta durante la instalación de una unidad.
neurona
Agregué [Install]seguido WantedBy=multi-user.targetal archivo, lo que resultó en systemctl enable ssh-user-sessions.serviceno arrojar un error y hace que el servicio tenga efecto en todos los reinicios. ¿Hay algo malo en hacer esto?
Programador