Eliminar procesos “zombies” de SSH
Hay veces que con SSH se cierran mal las conexiones, y se quedan procesos abiertos (zombies) en la máquina que tiene el demonio de SSH.
Ejemplo:
#ps -ef calidad 7762 7761 0 Nov03 ? 00:00:00 [scp] <defunct> root 1898 2384 0 Nov03 ? 00:00:00 sshd -i -f /etc/ssh/sshd_config calidad 1913 1898 0 Nov03 ? 00:00:00 sshd -i -f /etc/ssh/sshd_config calidad 1914 1913 0 Nov03 ? 00:00:00 [scp] <defunct> root 4664 2384 0 Nov03 ? 00:00:00 sshd -i -f /etc/ssh/sshd_config calidad 4669 4664 0 Nov03 ? 00:00:00 sshd -i -f /etc/ssh/sshd_config calidad 4670 4669 0 Nov03 ? 00:00:00 [scp] <defunct> root 6344 2384 0 Nov03 ? 00:00:00 sshd -i -f /etc/ssh/sshd_config calidad 6349 6344 0 Nov03 ? 00:00:00 sshd -i -f /etc/ssh/sshd_config calidad 6350 6349 0 Nov03 ? 00:00:00 [scp] <defunct>
Para eliminar estas sesiones que se quedan sin cerrar correctamente, se puede enviar la señal de reinicio al proceso de SSH, por cada una de las sesiones mal cerradas:
pstree -cpal | egrep [s]shd | perl -lne '($i)=(/(d+)/); `kill -1 $i`'
Con esto conseguimos que se reinicien todas las conexiones de SSH que tiene la máquina.
(Recuerda que hay que tener Perl instalado para poder ejecutar el comando anterior).
Excelente linea, otra forma de hacerlo sin la necesidad del perl es pasando los argumentos por egrep y xargs, algo así como(aunq la mayoría de las distros Linux vienen con perl y python):
pstree -cpal | grep ssh | cut -d’,’ -f2 | egrep -o ‘^[0-9]+’ | xargs kill -1
Saludos!.
Gracias por tu aportación 😉