Dónde encontrar los registros SSH (sshd) en Linux y cómo exportarlos

Dónde encontrar los registros SSH (sshd) en Linux y cómo exportarlos

SOC Prime Team
SOC Prime Team linkedin icon Seguir

En Debian y Ubuntu, sshd escribe en /var/log/auth.log. En RHEL, Rocky, Alma y CentOS Stream, escribe en /var/log/secure. Si ninguno de estos archivos existe, tu sistema registra solo en el journal de systemd. Entonces, el comando que necesitas es journalctl -u ssh en sistemas basados en Debian, o journalctl -u sshd en la familia Red Hat, Fedora y Arch.

SSH es la puerta de entrada de casi todos los servidores Linux, por eso sus registros aparecen en casi todas las investigaciones de Linux. Prime Core tiene 11,632 reglas sigma que se ejecutan sobre registros de autenticación de Linux como estos, mapeados a 643 técnicas de MITRE ATT&CK. Entre ellas: fuerza bruta (T1110), inicios de sesión con credenciales robadas (T1078) y movimiento lateral sobre SSH (T1021.004). A continuación, cómo encontrar tus registros sshd, exportarlos, sanitizarlos e investigarlos gratis en LogTotal.

Comienza gratis

Resumido

Familia de distribucionesArchivo de registroComando del journal
Debian, Ubuntu/var/log/auth.logjournalctl -u ssh
RHEL, Rocky, Alma, CentOS Stream/var/log/securejournalctl -u sshd
Fedora, Arch, instalaciones mínimas sin rsyslogninguno por defectojournalctl -u sshd

Antes de comenzar: ¿realmente puedes leerlos?

Los registros de autenticación están protegidos a propósito, por lo que una cuenta regular usualmente no obtiene nada.

  • /var/log/auth.log en Debian y Ubuntu es legible por root y el grupo adm.
  • /var/log/secure en la familia Red Hat es solo para root.
  • El journal del sistema está abierto a root y miembros de systemd-journal, adm y wheel. Los demás solo ven su propio journal de usuario. Si ejecutas journalctl -u ssh como un usuario normal, obtienes un resultado vacío y un indicio de que no estás viendo mensajes de otros usuarios. Eso es permisos, no un servidor silencioso.

La solución simple es sudo. Si estás configurando una cuenta solo para la recolección de registros, agrégala a adm o systemd-journal en lugar de dar acceso root. Nuestra [guía de permisos de registros de Linux] cubre los detalles.

Una cosa más antes de copiar cualquier cosa de un servidor: los registros de autenticación contienen nombres de usuario, IPs de origen y nombres de host. LogTotal sanitiza las cargas, pero verifica primero tu política de manejo de datos.

Paso 1: ¿Archivo, journal o ambos?

La tabla anterior muestra los valores predeterminados, y los valores predeterminados son exactamente lo que les gusta cambiar a las imágenes de la nube y los scripts de endurecimiento. Dedica diez segundos a verificar:

ls -l /var/log/auth.log /var/log/secure 2>/dev/null
systemctl is-active rsyslog

Si aparece un archivo y rsyslog está activo, tienes ambos: rsyslog copia mensajes del journal en un archivo de texto plano. Cualquiera de las fuentes funciona, y el archivo es más fácil de copiar.

Si no hay archivo, rsyslog simplemente no está instalado. Eso es lo normal ahora: desde Debian 12, rsyslog ya no es parte de una instalación predeterminada, por lo que una instalación fresca de Debian no tiene auth.log en absoluto. Fedora y Arch han funcionado de esta manera durante años. Pasa al Paso 2b.

Mientras estás aquí, comprueba si el journal sobrevive a un reinicio:

ls -d /var/log/journal

Si ese directorio no existe, journald mantiene los registros en memoria en /run/log/journal, y un reinicio los borra. En una máquina que estás investigando, eso vale la pena saber antes de que alguien decida «solo reiniciarla».

Otro punto más para el trabajo en incidentes: si la caja podría estar comprometida, sus registros locales también podrían estarlo. Borrar o editar auth.log es un paso clásico de limpieza. Si el servidor reenvía registros a un SIEM, exporta desde allí también y compara. Nuestra [guía de exportación de Splunk] muestra cómo.

Paso 2a: Exportar desde auth.log o secure

El archivo actual solo cubre los últimos días. Las entradas antiguas se encuentran en archivos rotados junto a él. En Debian y Ubuntu se ven como auth.log.1, auth.log.2.gz, etc. En la familia Red Hat llevan una fecha, como secure-20261012. Si el incidente comenzó la semana pasada, también necesitas esos.

Esto extrae líneas de sshd de los archivos actuales y rotados, de las más antiguas a las más recientes, en un solo archivo:

# Debian / Ubuntu
sudo zgrep -h ‘sshd’ $(ls -tr /var/log/auth.log*) > web-03_sshd.log

# RHEL / Rocky / Alma
sudo zgrep -h ‘sshd’ $(ls -tr /var/log/secure*) > web-03_sshd.log

zgrep lee tanto archivos planos como comprimidos, por lo que no tienes que descomprimir nada. ls -tr ordena por tiempo de modificación, de modo que el archivo más antiguo va primero y la salida se mantiene aproximadamente cronológica. El patrón sshd también coincide con sshd-session, lo cual es importante en sistemas más nuevos (ver Paso 2b).

¿Por qué filtrar en absoluto? Además de reducir el ruido, auth.log también registra sudo, y las líneas sudo incluyen líneas de comando completas. Las personas ocasionalmente escriben contraseñas en esas. Filtrar a sshd mantiene eso fuera del archivo. La excepción es cuando estás investigando lo que hizo un atacante después de iniciar sesión. Entonces también querrás las líneas sudo: toma todo el archivo y deja que el paso de sanitización de LogTotal haga su trabajo.

Revisión rápida antes de subir:

wc -l web-03_sshd.log
head -3 web-03_sshd.log; tail -3 web-03_sshd.log

Observa las marcas de tiempo. Dependiendo de la configuración de rsyslog, son o bien syslog clásico (Oct 19 10:15:01, sin año, sin zona horaria) o ISO 8601 completo. Si son clásicos, toma nota de la zona horaria del servidor (timedatectl). La necesitarás en el momento en que intentes alinear estos eventos con cualquier otra cosa.

Paso 2b: Exportar desde el journal de systemd

En sistemas solo con journal, este es todo el trabajo:

sudo journalctl -u ssh -u sshd
  –since «2026-10-19 00:00» –until «2026-10-20 00:00»
  –no-pager -o short-iso > web-03_sshd.log

Algunas elecciones aquí son deliberadas.

Ambos nombres de unidad. El servicio se llama ssh en Debian y Ubuntu y sshd casi en todos los demás lugares. journalctl combina repetidos flags -u con OR, por lo que el mismo comando funciona en ambas familias.

Filtra por unidad, no por etiqueta. Muchos guías antiguas usan journalctl -t sshd. Desde OpenSSH 9.8, el servidor se divide en dos binarios, y los mensajes por conexión, incluidos los inicios de sesión, son etiquetados sshd-session en lugar de sshd. Filtrar por etiqueta, y pierdes exactamente las líneas por las que viniste. Esto rompió muchos setups de fail2ban y sshguard cuando 9.8 llegó en 2024. RHEL 10 y otras versiones actuales envían OpenSSH 9.8 o más reciente. Filtrar por unidad captura cada proceso que pertenece al servicio, comoquiera que se llame.

-o short-iso. Te da una línea al estilo syslog con una marca de tiempo ISO 8601 completa, año y zona horaria incluidos, para que no tengas que adivinar. Si prefieres mantener cada campo del journal (PID, boot ID, nombre de host, etc.), usa -o json, que escribe un objeto JSON por línea. El archivo se hace más grande, pero no se pierde nada.

Los filtros de tiempo también aceptan valores relativos: –since «hace 2 horas» o –since ayer. Con un journal persistente, -b -1 limita la salida al arranque anterior, lo que ayuda si el servidor se reinició después del incidente.

No copies los archivos binarios .journal de /var/log/journal y los subas. LogTotal lee texto y JSON, y los archivos de journal no son ninguno de ellos.

Qué buscar una vez que tienes el archivo

La mayoría de las líneas de sshd caen en un puñado de patrones:

Línea comienza conQué significa
Contraseña fallida para <usuario> desde <ip>Contraseña incorrecta para una cuenta que existe
Usuario inválido <usuario> desde <ip>El nombre de usuario no existe; típico de escáneres que ciclan por admin, test, oracle
Contraseña aceptada para / Clave pública aceptada paraUn inicio de sesión exitoso; la línea de clave pública también incluye la huella SHA256 de la clave
Desconectando usuario que se está autenticando … Demasiados fallos de autenticaciónEl cliente alcanzó MaxAuthTries
Conexión cerrada por <ip> … [preauth]Caído antes de la autenticación, usualmente escáneres y capturadores de banner
pam_unix(sshd:session): sesión abierta para el usuarioLa sesión realmente comenzó

La secuencia por la que vale la pena detenerse: una serie de líneas de Contraseña fallida o Usuario inválido desde una IP, luego una Aceptada de la misma IP. Eso es una fuerza bruta que funcionó. Cerca detrás: una Aceptada para una cuenta de servicio, desde una dirección que nadie reconoce, a una hora que nadie trabaja.

En OpenSSH 9.8 y posteriores también puedes ver mensajes sobre penalizaciones: sshd ahora rechaza temporalmente direcciones que continúan fallando la autenticación. Trátalas como un síntoma. Te dicen que alguien estuvo golpeando el puerto, no que alguien haya ingresado.

Subir, sanear y revisar en LogTotal

Leer algunas cientos de líneas a simple vista está bien. Leer 40,000 no lo está. LogTotal es el servicio gratuito de SOC Prime para ejecutar lógica de detección contra un archivo de registro sin configurar nada. Saneece lo que subas y no conserva tus archivos.

  1. Subir. Abre logtotal.com y coloca web-03_sshd.log.
  2. Sanear. Observa el resultado antes de continuar. Sabes cuáles de esos nombres son sensibles en tu entorno.
  3. Revisar.

Cuando sale mal

SíntomaCausa probableFix
No existe tal archivo o directorio para auth.logrsyslog no está instalado (predeterminado desde Debian 12)Usa journalctl, Paso 2b
Permiso denegado en el archivo de registroauth.log es solo para adm, secure es solo para rootsudo, o agrega la cuenta a adm
journalctl -u ssh no devuelve nada, con un indicio sobre otros usuariosNo estás en systemd-journal, adm o wheelsudo, o agrega la cuenta a systemd-journal
journalctl -u ssh no devuelve nada como rootNombre de unidad incorrecto para esta distribuciónUsa -u ssh -u sshd
Las desconexiones están ahí, pero no las líneas AceptadasFiltrando por etiqueta (-t sshd) en OpenSSH 9.8+Filtra por unidad en su lugar
Nada más antiguo que el último reinicioJournal volátil; sin /var/log/journalLos registros antiguos ya no están; verifica tu SIEM o reenviador de registros
El archivo solo cubre unos díasNo se incluyeron los archivos rotadosUsa el comando zgrep con auth.log* o secure*
Las marcas de tiempo no se alinean con otras fuentesLas marcas de tiempo syslog clásicas no llevan zona horariaAnota la zona horaria del servidor, o exporta con -o short-iso

FAQ

¿Dónde están los registros SSH en Ubuntu?

En una instalación estándar de Ubuntu, en /var/log/auth.log, además del journal (journalctl -u ssh). Las imágenes mínimas en la nube a veces dejan fuera rsyslog. Si el archivo no está allí, usa el journal.

¿Cómo veo solo los inicios de sesión SSH fallidos?

sudo journalctl -u ssh -u sshd | grep -E ‘Failed|Invalid user’ en sistemas con journal, o sudo zgrep -hE ‘Failed|Invalid user’ /var/log/auth.log* cuando tienes el archivo. Para algo más que un vistazo rápido, sube el registro completo de sshd en su lugar. Los fracasos solo significan algo junto a los éxitos.

¿Qué pasa con last y lastb?

Leen los registros binarios de inicio de sesión en /var/log/wtmp y /var/log/btmp. Son útiles para un vistazo rápido a quién inició sesión, pero llevan mucho menos detalle que el registro propio de sshd, y son igual de fáciles para que un intruso los manipule.

¿Cómo recojo registros de sshd de varios servidores a la vez?

Para una sola vez, un bucle lo hace: for h in web-01 web-02 web-03; do ssh «$h» «sudo journalctl -u ssh -u sshd –since yesterday -o short-iso –no-pager» > «${h}_sshd.log» done Eso necesita que sudo funcione sin un requerimiento de contraseña en el lado remoto. De lo contrario, agrega -t a ssh y escríbela cada vez. Si estás haciendo esto más de una vez por trimestre, envía los registros a un SIEM en su lugar.

¿Es seguro subir registros de sshd a una herramienta en línea?

LogTotal sanitiza las cargas antes del análisis y no retiene archivos; nuestra [guía de sanitización] muestra qué se enmascara. Las reglas de manejo de datos de tu organización siguen siendo lo primero.

Próximo paso

¿Tienes el archivo? Súbelo a LogTotal y ve qué hacen esas 11,632 reglas sigma con él. Si deseas que la misma lógica de detección se ejecute en todos tus servidores Linux, no un archivo a la vez.

Referencias

Únete a la plataforma Detection as Code de SOC Prime para mejorar la visibilidad de las amenazas más relevantes para tu negocio. Para ayudarte a comenzar y obtener valor inmediato, programa una reunión ahora con los expertos de SOC Prime.