Vamos a ver cómo activar el modo de depuración al ejecutar SSH en Linux
Cuando ejecutemos el modo depuración SSH (modo DEBUG) veremos realmente lo que está pasando mientras nos conectamos a un servidor Open SSH.
- ¿Cómo se habilita el debug de SSH?
- Registrar en un fichero de log la conexión SSH y los comandos ejecutados
- Habilitar el modo depuración desde la configuración de SSH
- Otros logs donde encontrar info de las conexiones SSH
- ¿Cómo se usa el comando last en Linux?
- ¿Qué es el fichero wtmp y como leerlo? (Ver los últimos inicios de sesión)
- ¿Cómo leer el fichero utmp? ( Ver todas las sesiones actuales)
- Cómo leer el fichero btmp (Ver todos los inicios de sesión incorrectos)
- ¿Cómo se usa el comando last en Linux?
Al utilizar el parámetro -v desde un cliente SSH, ejecutaremos SSH en modo detallado (DEBUG, o “verbose“) lo cual nos mostrara info acerca de la progresión de la conexión.
Esto es especialmente útil cuando tengamos problemas y no sepamos en qué punto de la conexión SSH podemos tener un problema; entonces con el modo depuración SSH veremos dónde está el error o los errores.
–> Ejecutamos el modo de depuración SSH de esta forma:
ssh -v usuario@maquina |
–> Igualmente cuando cerremos sesión de SSH veremos mensajes de depuración avanzada en el fichero
/var/log/auth.log |
–> También podemos aumentar incluso el nivel de verbosidad por ejemplo el a nivel 2 y al nivel 3 (definido en el fichero /etc/ssh/sshd_config)para de esta forma obtener todavía más mensajes de depuración:
LogLevel DEBUG2 |
LogLevel DEBUG3 |
root@RASP:/home/pi# ssh -v pi@192.168.-.- OpenSSH_7.4p1 Raspbian-10+deb9u7, OpenSSL 1.0.2u 20 Dec 2019 debug1: Reading configuration data /etc/ssh/ssh_config debug1: /etc/ssh/ssh_config line 19: Applying options for * debug1: Connecting to 192.168.8.194 [192.168.-.-] port 22. debug1: Connection established. debug1: permanently_set_uid: 0/0 debug1: identity file /root/.ssh/id_rsa type 1 debug1: key_load_public: No such file or directory debug1: identity file /root/.ssh/id_rsa-cert type -1 debug1: key_load_public: No such file or directory debug1: identity file /root/.ssh/id_dsa type -1 debug1: key_load_public: No such file or directory debug1: identity file /root/.ssh/id_dsa-cert type -1 debug1: key_load_public: No such file or directory debug1: identity file /root/.ssh/id_ecdsa type -1 debug1: key_load_public: No such file or directory debug1: identity file /root/.ssh/id_ecdsa-cert type -1 debug1: key_load_public: No such file or directory debug1: identity file /root/.ssh/id_ed25519 type -1 debug1: key_load_public: No such file or directory debug1: identity file /root/.ssh/id_ed25519-cert type -1 debug1: Enabling compatibility mode for protocol 2.0 debug1: Local version string SSH-2.0-OpenSSH_7.4p1 Raspbian-10+deb9u7 debug1: Remote protocol version 2.0, remote software version OpenSSH_7.4p1 Raspbian-10+deb9u2 debug1: match: OpenSSH_7.4p1 Raspbian-10+deb9u2 pat OpenSSH* compat 0x04000000 debug1: Authenticating to 192.168.-.-:22 as 'pi' debug1: SSH2_MSG_KEXINIT sent debug1: SSH2_MSG_KEXINIT received debug1: kex: algorithm: curve25519-sha256 debug1: kex: host key algorithm: ecdsa-sha2-nistp256 debug1: kex: server->client cipher: chacha20-poly1305@openssh.com MAC: <implicit> compression: none debug1: kex: client->server cipher: chacha20-poly1305@openssh.com MAC: <implicit>; compression: none debug1: expecting SSH2_MSG_KEX_ECDH_REPLY debug1: Server host key: ecdsa-sha2-nistp256 SHA256:cHYpb5FTzjO+7KSmpiDfSj5gaaCS2NMlc1spdoCQRKw debug1: Host '192.168.-.-' is known and matches the ECDSA host key. debug1: Found key in /root/.ssh/known_hosts:1 debug1: rekey after 134217728 blocks debug1: SSH2_MSG_NEWKEYS sent debug1: expecting SSH2_MSG_NEWKEYS debug1: SSH2_MSG_NEWKEYS received debug1: rekey after 134217728 blocks debug1: SSH2_MSG_EXT_INFO received debug1: kex_input_ext_info: server-sig-algs=<ssh-ed25519,ssh-rsa,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521> debug1: SSH2_MSG_SERVICE_ACCEPT received debug1: Authentications that can continue: publickey,password debug1: Next authentication method: publickey debug1: Offering RSA public key: /root/.ssh/id_rsa debug1: Authentications that can continue: publickey,password debug1: Trying private key: /root/.ssh/id_dsa debug1: Trying private key: /root/.ssh/id_ecdsa debug1: Trying private key: /root/.ssh/id_ed25519 debug1: Next authentication method: password pi@192.168.-.-'s password: |
Registrar en un log la conexión SSH y los comandos ejecutados
Una vuelta de tuerca sería registrar toda la info de la conexión SSH en un fichero.
- Podríamos hacerlo enviando toda la info de la sesión SSH en modo depuración, a un archivo de texto:
ssh -v usuario@IP 2>fichero.txt |
- O también podemos usar tee
tee es una utilidad que recibe la “entrada estandar” , la escribe en un archivo, y escribe la “salida estandar”
Usaremos tee de esta forma:
ssh usuario@servidor| tee -a archivo |
Nos conectamos por ssh, ejecutamos los comandos necesarios y después descubrimos el contenido del fichero de log creado por tee:
Podemos ver que se han registrado todos los comandos ejecutados en la sesión SSH.
Habilitar el modo Debug desde la configuración de SSH
En lugar de registrar la conexión SSH al conectarnos, también podemos habilitar el modo depuración en el servidor SSH, para así registrar más info sobre las conexiones SSH que se establezcan.
Añadimos
LogLevel DEBUG |
en el fichero /etc/ssh/sshd_config del servidor SSH
Por defecto nos encontraremos Loglevel INFO
—> Lo cambiamos por LogLevel DEBUG para aumentar la depuración (la verbosidad de los datos que obtendremos).
acepta hasta DEBUG 3, según el modo de depuración que queramos. (DEBUG es igual que DEBUG1)
Otros logs donde encontrar info de las conexiones SSH
A continuación conoceremos algunos ficheros de Linux que contienen info interesante sobre sesiones e inicio de sesión en máquinas Unix.
¿Cómo se usa el comando last en Linux?
Utilizaremos el comando last para leer correctamente la información los ficheros wtmp,utmp y btmp.
last es un comando de linux que investiga dentro del fichero wtmp,utmp y btmp y muestra una lista con información relativa a las sesiones.
En el caso del fichero wtmp, last muestra todos los intentos de sesión.
No podemos usar por ejemplo el comando cat, porque la salida será ilegible:
Veamos pues los siguientes ficheros:
- /var/log/wtmp – Logs de los últimos inicios de sesión
- /var/run/utmp – Logs de las sesiones actuales
- /var/log/btmp – Logs de los intentos de inicio de sesión incorrectos
Para ver el contenido de estos ficheros usaremos el comando last :
last |
También podemos usar el comando last para ver el contenido de los anteriores ficheros : wtmp, utmp, btmp. Veamos cómo.
–> Ver los últimos inicios de sesión (fichero /var/log/wtmp)
–> Ver todas las sesiones actuales (fichero /var/log/utmp)
last /var/log/utmp |
–> Ver todos los inicios de sesión incorrectos (fichero /var/log/btmp)
last -f /var/log/btmp |
Mostrar la ayuda (man) del fichero sshd_config
Ejecutamos la ayuda de Linux para ver la explicación de las directivas de SSH y sus posibles configuraciones:
man sshd_config |