Memory vault

An attemp to store volatile memories

View My GitHub Profile

Desconectar sesiones SSH inactivas

Via: (http://haydenjames.io/kill-inactive-ssh-sessions/)

Cuando trabajamos con un sistema remoto mediante SSH, en ocasiones la conexión se cae dejando sesiones SSH “muertas” en el sistema remoto.

Podemos configurar SSH para que estas sesiones se acaben desconectando con el tiempo, pero podemos limpiarlas de forma manual.

Para identificar estos casos, mediante el comando w podemos ver cuantos usuarios hay conectados al sistema, por ejemplo aquí vemos que hay dos conexiones del usuario hfiel:

13:28:52 up  4:21,  3 users,  load average: 0,20, 0,33, 0,30
USUARIO  TTY      DE               LOGIN@   IDLE   JCPU   PCPU WHAT
hfiel    pts/0    192.168.1.20     12:34    12:34  12:34  1.23s -bash
hfiel    pts/1    192.168.1.20     23:45    23:45  23:45  2.34s w

Para localizar y eliminar el proceso SSH bloqueado, lanzamos el comando:

 pstree -p

En la salida del mismo, veremos el árbol de procesos junto con los PID de cada proceso, y localizaremos el proceso “padre” sshd. De dicho proceso cuelgan las distintas sesiones SSH

 ├─sshd(1234)─┬─sshd(2345)───bash(3456)
 │            └─sshd(4567)───bash(5678)───pstree(6789)

La sesión actualmente activa es la que contiene el proceso pstree (en este ejemplo, la sesión SSH con el PID 4567). La sesión inactiva no tendrá dicho proceso (en este ejemplo, la sesión SSH con el PID 2345).

Para desconectar la sesión incativa, procedemos a matar al proceso asociado a la misma mediante kill, en este ejemplo:

kill 2345

y verificamos con w que ya sólo tenemos nuestra sesión

13:28:52 up  4:21,  3 users,  load average: 0,20, 0,33, 0,30
USUARIO  TTY      DE               LOGIN@   IDLE   JCPU   PCPU WHAT
hfiel    pts/1    192.168.1.20     23:45    23:45  23:45  2.34s w

Para activar la desconexión automática de las sesiones inactivas

Editamos el fichero /etc/ssh/sshd_config para añadir las siguientes opciones:

ClientAliveInterval 600
ClientAliveInterval 3