Administrar conexiones SSH


9

En un servidor Linux, ¿cómo podría encontrar una lista de todas las conexiones SSH actuales o desconectar una conexión SSH específica?


¿Está interesado en las conexiones SSH entrantes o salientes? ¿o ambos?
— Shawn Chin

2
Esta pregunta es más relevante para el superusuario

Solo me interesan las conexiones entrantes.
— Cerin

Respuestas:


13

Si planea hacer esto de manera interactiva, lo más simple sería simplemente invocar whoy ver si hay usuarios de un host remoto.

[you@host]$ who
user1      :0           Feb  8 09:45
user1      pts/1        Feb 14 17:56 (:0.0)
malcolm    pts/3        Feb 15 17:50 (cockpit.serenity.com)
reynold    pts/2        Feb 15 17:48 (host123.firefly.co.uk)

Por supuesto, esto no es infalible, pero es extremadamente simple de escribir a pedido y procesar fácilmente con el ojo humano.

Como señaló @gravyface, si incluye una -uopción whotambién imprimirá el PID asociado que luego puede pasar killpara finalizar una conexión.


1
-ute dará el PID.
— gravyface

esto no muestra las IP si hay múltiples conexiones en un usuario
— Alguien

Por alguna razón, esto no funcionó. Desde una máquina remota, inicié sesión en mi máquina usando ssh, y en mi máquina, ejecuté a who -u. Matar al pid no terminó la conexión en mi máquina remota. Sin embargo, después de que hice una lsof -i | grep ":ssh" sugerencia en la respuesta de @kce, obtuve un pid diferente; matar ese proceso terminó la conexión. Tal vez hay múltiples procesos que se inician debido a una conexión ssh y matando al que se muestra por quién no termina la conexión; Esa es mi explicación.
— Neo M Hacker

8

¿Qué hay de usar lsof?

# lsof -i |grep ":ssh"

sshd    1943      root    3u  IPv6   5698       TCP *:ssh (LISTEN)
sshd    1943      root    4u  IPv4   5700       TCP *:ssh (LISTEN)
sshd    3217      root    3r  IPv4   9687       TCP www.example.com:ssh->192.168.61.11:7341 (ESTABLISHED)
sshd    3220      user1   3u  IPv4   9687       TCP www.example.com:ssh->192.168.61.11:7341 (ESTABLISHED)
sshd    3327      root    3r  IPv4  10595       TCP www.example.com:ssh->192.168.61.11:7385 (ESTABLISHED)
sshd    3330      user2   3u  IPv4  10595       TCP www.example.com:ssh->192.168.61.11:7385 (ESTABLISHED)

Entonces debería poder cerrar la conexión ofensiva (por ejemplo, desconectar user2):

# kill -9 3330

3
Úselo lsof -i tcp:22y no necesitará el grep.
— Shawn Chin

Solo si ejecuta el sshy no especifica la -popción ..
— Jindra Helcl

1

Para ver las conexiones ssh puede hacer a netstat -atn | grep ':22'. Muestra todas las conexiones en el puerto 22.

Para desconectar la conexión, puede intentar encontrar el PID del sshd (SSH Daemon) con ps-ax.

Editar: creo que puedes encontrar el PID de su bashsesión (o shell equivalente). Matar eso debería dejarlos bien.

Otro recurso: este hilo tiene algunos consejos sobre el tema.


No tengo conexiones activas en mi máquina actual, pero netstat todavía enumera una conexión tcp y tcp6. ¿Qué haría con el PID de sshd? ¿Estás implicando que debería matar a todo el servidor SSH solo para desconectar una sola conexión?
— Cerin

@Cerin Esas dos conexiones muestran que está escuchando en esos puertos (solo)

No especificaste, pero debería haberlo pensado. Lo sentimos: /
— Trata bien tus modificaciones.

0

Prueba esto:

$ ps aux | grep sshd

Para desconectarlos, podría kill PID(dónde PIDestá el Id. Del proceso en la segunda columna), si tiene privilegios de root o es el usuario en cuestión.


Esto solo muestra que sshd se está ejecutando y el usuario con el que se estableció la conexión (no el número de conexiones, de qué IP es)
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.