Fijo que a muchos de vosotros os ha pasado alguna vez. Entráis en un equipo y descubrís un usuario que está haciendo un uso del mismo que no debe, o tiene una sesión que no debiera, o cualquier otro motivo. El caso es que necesitáis terminar con dicha conexión remota. Para hacer esto existen diversas formas de lograrlo.
La primera es directamente relacionada con procesos y socket's. Cuando un usuario inicia sesión en un equipo remoto, vía SSH, se abre un socket en éste, por lo que haciendo un poco de uso de netstat y de ps, podremos saber exactamente qué proceso habrá que matar.
shell> netstat -pnat Proto Local Address Foreign Address State PID/Program name tcp 0.0.0.0:22 0.0.0.0:* LISTEN 2086/sshd tcp 127.0.0.1:20001 0.0.0.0:* LISTEN 1065/netams tcp 127.0.0.1:3306 0.0.0.0:* LISTEN 1697/mysqld tcp 192.168.1.16:22 192.168.1.33:47350 ESTABLISHED 32322/sshd: javier tcp6 :::22 :::* LISTEN 2086/sshd
En la línea destacada en negrita se observa claramente cómo en el servidor (IP: 192.168.1.16) hay una conexión SSH establecida por el cliente 192.168.1.33 con nombre de usuario javier. También se puede observar perfectamente el PID del proceso, 32322. Por suerte, el usuario no está conectado como root, sino como usuario normal, algo lógico por seguridad. Vamos a ver por lo tanto el proceso,
shell> ps -ef | grep 32322 root 32322 2086 0 May06 ? 00:00:00 sshd: javier [priv] javier 32325 32322 0 May06 ? 00:00:00 sshd: javier@pts/1
Todo usuario normal crea dos procesos, uno como root, que es la sesión de SSH y otro como usuario normal, que es el que realmente debemos de matar. Por lo tanto, en este caso deberíamos de matar el PID 32325. Para ello,
shell> kill -9 32325Y al cliente le saldrá en su conexión la siguiente línea,
shell> Connection to 192.168.1.16 closed by remote host. Connection to 192.168.1.16 closed.
Ahora ya es cuestión del administrador encargarse de que dicho usuario no vuelva a iniciar sesión en la máquina si así lo desea.
La segunda forma que vamos a ver es más simple. Es bueno siempre terminar de leerse las entradas ;-). En este caso, vamos a emplear el comando pkill, que tiene un funcionamiento muy similar a kill, sólo que no coge como parámetro el PID del proceso, sino algún otro atributo del mismo. En este caso, el número de terminal.
shell> who javier pts/0 2013-05-06 18:41 (:0.0) javier pts/1 May 6 18:56 (192.168.1.33)
Con el comando who, obtenemos el listado de los usuarios conectados al sistema. Destacamos en negrita el usuario y la sesión del mismo que queremos eliminar. Como se puede observar, está en el terminal 1 y conectado desde la IP 192.168.1.33.
Ahora hacemos uso de pkill, desde el que le mandamos una señal -9 (KILL) al proceso cuya TTY sea el terminal pts/1, tal que así,
shell> pkill -9 -t pts/1
Espero que esta entrada os pueda ser de utilidad. Siempre es bueno tener a mano los comandos necesarios para volver a tener el control del sistema y limitar los usuarios que estén dentro del equipo. Aunque, lógicamente, lo mejor es no tener que recurrir a estas técnicas.
La entrada Matar una conexión SSH remota la puedes leer en Puppet Linux.
No hay comentarios :
Publicar un comentario