Cómo encontrar conexiones SSH activas en Linux

Objetivo y contexto
Si administras servidores Linux, con frecuencia necesitarás saber quién está conectado por SSH y desde qué IP. Este artículo explica métodos prácticos para listar conexiones activas, interpretar los resultados y actuar en consecuencia.
Prerrequisitos
- Un servidor con Linux.
- Acceso de root o privilegios con sudo.
- Conocimiento básico de la terminal.
Important: Algunos comandos requieren utilidades instaladas (netstat viene con net-tools; ss con iproute2). Si faltan, se indica alternativa.
Modelo mental rápido
Piensa en tres fuentes de verdad:
- Registros y archivos de sesión (who, last, /var/log/auth.log).
- Tabla de procesos (ps muestra procesos sshd y PIDs).
- Tabla de sockets (ss, netstat, lsof muestran conexiones TCP establecidas).
Comandos esenciales y ejemplos
A continuación están los comandos más usados, con salidas de ejemplo y qué interpretar.
1) who — quién está conectado ahora
who muestra usuarios con sesión en el sistema y, cuando procede, la IP origen.
Ejecuta:
who
Ejemplo de salida:
root pts/0 2020-05-01 02:37 (27.61.161.61)
root pts/1 2020-05-01 02:39 (45.58.38.21)
Interpretación: indica dos sesiones activas desde 27.61.161.61 y 45.58.38.21.
2) w — información más detallada
w añade tiempos de inactividad, procesos en ejecución y carga del sistema.
w
Salida de ejemplo:
02:40:07 up 1 day, 18:35, 2 users, load average: 0.02, 0.02, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 27.61.161.61 02:37 1.00s 0.04s 0.01s ssh [email protected]
root pts/1 45.58.38.21 02:39 1.00s 0.02s 0.00s w
Qué aporta: identifica qué comando está ejecutando cada sesión y la IP de origen.
3) ps — procesos sshd y sus PIDs
ps muestra procesos relacionados con sshd; útil para obtener PIDs y mapear a sesiones.
ps auxwww | grep sshd: | grep -v grep
Salida de ejemplo:
root 609 0.0 0.1 12160 7268 ? Ss Apr29 0:01 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
root 35532 0.0 0.2 13864 8796 ? Ss 02:37 0:00 sshd: root@pts/0
root 35669 0.0 0.2 13860 8916 ? Ss 02:38 0:00 sshd: root@pts/1
Cómo usarlo: con el PID puedes investigar más (por ejemplo, lsof -p PID o grep en los registros).
4) netstat — conexiones TCP establecidas (si está instalado)
netstat muestra sockets TCP y programas asociados.
netstat -tnpa | grep 'ESTABLISHED.*sshd'
Salida de ejemplo:
tcp 0 88 45.58.38.21:22 27.61.161.61:8363 ESTABLISHED 35532/sshd: root@pt
tcp 0 0 45.58.38.21:22 45.58.38.21:51166 ESTABLISHED 35669/sshd: root@pt
Nota: netstat pertenece a net-tools; en muchas distribuciones modernas se prefiere ss.
5) last — sesiones registradas y las que siguen activas
last lee /var/log/wtmp y muestra sesiones previas y presentes.
last -a | grep -i still
Salida de ejemplo:
root pts/1 Fri May 1 02:39 still logged in 45.58.38.21
root pts/0 Fri May 1 02:37 still logged in 27.61.161.61
reboot system boot Wed Apr 29 08:04 still running 5.4.0-26-generic
Útil para auditoría histórica y ver sesiones que continúan abiertas.
6) ss — herramienta moderna para sockets
ss es la alternativa moderna a netstat; suele ofrecer más información y es más rápida.
ss | grep -i ssh
Salida de ejemplo:
tcp ESTAB 0 0 45.58.38.21:51166 45.58.38.21:ssh
tcp ESTAB 0 56 45.58.38.21:ssh 27.61.161.61:8363
tcp ESTAB 0 0 45.58.38.21:ssh 45.58.38.21:51166
Interpretación: muestra sockets ESTABLISHED y los extremos local/remoto.
Métodos alternativos
- lsof: listar sockets abiertos por proceso. Ejemplo: lsof -i :22 -nP
- journalctl: ver entradas de sshd en systemd: journalctl -u ssh -e
- auditd: para auditoría avanzada de eventos de login.
Cuando estos métodos pueden fallar o dar información incompleta
- Conexiones proxied (ProxyJump, bastiones) pueden mostrar la IP del salto intermedio, no la IP final del cliente.
- Sesiones con multiplexación (ControlMaster) podrían reutilizar conexiones sin nuevas entradas en who/last.
- Algunas imágenes ligeras o contenedores pueden no incluir netstat/ss/lsof; instala paquetes necesarios o usa /proc/net/tcp.
Checklist rápido para administradores (Role-based)
Para el administrador del sistema:
- Ejecutar ss o netstat para confirmar sockets ESTABLISHED.
- Ejecutar ps para mapear PIDs de sshd a usuarios.
- Revisar last y who para historial y sesiones activas.
- Comprobar /var/log/auth.log o /var/log/secure según distro.
Para el equipo de seguridad:
- Correlacionar IP con listas negras o amenazas conocidas.
- Comprobar si el usuario usa autenticación por clave o contraseña.
- Revisar cambios inusuales de hora de login o comandos ejecutados.
Mini-cheat sheet (comandos rápidos)
- who
- w
- ps auxwww | grep sshd
- ss -tnp | grep sshd
- netstat -tnpa | grep ‘ESTABLISHED.*sshd’
- last -a | grep -i still
- lsof -i :22 -nP
- journalctl -u ssh -e
Recomendaciones de seguridad y privacidad
- Preferir autenticación por clave y deshabilitar root login por contraseña (PermitRootLogin no en sshd_config).
- Implementar Fail2Ban o bloqueos por IP para mitigar intentos de fuerza bruta.
- Mantener registros de acceso en /var/log/auth.log o /var/log/secure y rotarlos con logrotate.
- Consideraciones GDPR/Privacidad: las direcciones IP son datos personales en algunos marcos legales; documenta retención y acceso a logs.
Important: cuando bloquees una IP, valida que no sea una IP legítima (por ejemplo, de una VPN corporativa).
Ejemplo de metodología para investigar una conexión sospechosa
- Identificar sesión: ss | grep
o netstat -tnpa. - Obtener PID: ps aux | grep
. - Auditar comandos: revisar shell history del usuario si es posible (~/.bash_history) y /var/log/auth.log.
- Si procede, desconectar: pkill -t pts/X o kill PID.
- Documentar la acción y bloquear IP si es maliciosa.
Glosario rápido (una línea)
- sshd: demonio del servidor OpenSSH que acepta conexiones SSH.
- PID: identificador de proceso en Linux.
- ESTABLISHED: estado TCP que indica conexión activa.
Conclusión
Verificar conexiones SSH activas implica mirar registros de sesión (who, last), procesos (ps) y sockets de red (ss/netstat/lsof). Cada fuente ofrece una perspectiva distinta; úsalas conjuntamente para auditar y actuar. Mantén prácticas de seguridad (clave pública, Fail2Ban, registros) y documenta cualquier bloqueo o desconexión.
Resumen final:
- who/w/last muestran usuarios y sesiones.
- ps identifica procesos sshd y PIDs.
- ss/netstat/lsof muestran sockets y puertos.
- Revisa logs y aplica reglas de seguridad antes de bloquear.
Notas: adapta comandos a tu distribución (por ejemplo, /var/log/auth.log en Debian/Ubuntu y /var/log/secure en CentOS/RHEL).
Materiales similares

Cómo descargar películas y series de Netflix
Preparar /dev/sda y GRUB para RAID1 en CentOS

Ver el recuento de "No me gusta" en YouTube — guía paso a paso

Filtra tus RSS con Feed Rinse

Smartphones hackean coches japoneses
