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?

Cerin
fuente
¿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.

Shawn Chin
fuente
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

fuente
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.

Por favor, trata bien tus modificaciones.
fuente
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.

ltn100
fuente
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)