Modo de depuración SSH | Debug

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.
 

 

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

 


 

modo debug SSH

 

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

 

ssh |comando tee para log de conexiones SSH
 

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.

SSH tee log
 


 

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

SSH loglevel DEBUG
 

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:

cat /var/log/wtmp

 

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

comando last para ver ultimas conexiones en Linux

 

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)

 

WTMP | ultimos inicios de sesión
 

 

–> Ver todas las sesiones actuales (fichero /var/log/utmp)

 

last  /var/log/utmp

 

utmp | ver sesiones actuales

 

 

–> Ver todos los inicios de sesión incorrectos (fichero /var/log/btmp)

 

last -f /var/log/btmp

/var/log/btmp | ultimos inicios de sesion incorrectos

 

 

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

 



man sshd_config