Grabar las sesiones de terminal en Linux

Es muy útil poder grabar las sesiones de terminal en Linux ya sea para nuestras propias sesiones, o por seguridad si somos los administradores del sistema.

 
Si estás buscando grabar todas las sesiones de terminal de los usuarios en Linux, ve a esta sección del artículo.
 
grabar sesion terminal linux
 
Para grabar sesiones de terminal en Linux usaremos los comandos script y para reproducir las sesiones el comando scriptreplay.

La diferencia del comando script respecto al comando history, es que history guarda el historial de los comandos, pero no muestra la salida de los comandos.

Con los comandos script y typescript, podemos llevar un registro completo de los comandos ejecutados y de la salida de los comandos, viendo la grabación de toda la sesión.

 

 

 

 

La ayuda del comando script muestra:

ayuda comando script

 

El comando script es parte del paquete bsdutils en sistemas basados en Debian, y del paquete util-linux-ng en sistemas basados en Red Hat.

 

Lo primero comprobamos si el paquete se encuentra encuentra instalado en el sistema; dependiendo de si está basado en CentOS o en Debian, lo comprobamos de estas formas:
 
–> Debian/Ubuntu:

test@Ubuntu:~$ dpkg -S /usr/bin/script
bsdutils: /usr/bin/script

 

–> CentOS/RedHat

# rpm -qf /usr/bin/script
util-linux-2.32.1-8.el8.x86_64
 
# rpm -qf /usr/bin/scriptreplay
util-linux-2.32.1-8.el8.x86_64

 

 

Cómo usar el comando script para grabar las sesiones de terminal en Linux

 

Primero, para comenzar a grabar nuestra sesión, tecleamos el comando:

script

y comenzará a capturar nuestra sesión en un fichero con nombre: typescript

test@Ubuntu:~$ script
Script iniciado; el fichero es typescript
test@Ubuntu:~$ id
uid=1001(test) gid=1001(test) grupos=1001(test),27(sudo)
test@Ubuntu:~$ pwd
/home/test

 

Cuando queramos dejar de grabar la sesión, tecleamos:

exit
test@Ubuntu:~$ exit
exit
Script terminado; el fichero es typescript

 

En esta sesión hemos ejecutado estos comandos:

date
ls
id
pwd
who
w

 

Después hemos parado la grabación de la sesión con:

exit

 

 

Ahora comprobamos el contenido del fichero typescript:

cat typescript

 

Podemos ver cómo se muestran todos los comandos ejecutados, y su salida por pantalla:

el contenido del fichero typescript linux

 

Y si investigamos el fichero con el editor vi, podemos ver:

contenido de fichero typescript

 

 

Grabar la sesión de terminal en Linux junto con la info de sincronización (opciones timing y log)

 
Si grabamos la sesión y la info de sincronización, podremos reproducir la sesión a tiempo real, con los mismos tiempos que cuando ejecutamos la sesión.

Para poder hacer esto, hemos de utilizar 2 parámetros:

timing y log

 

Cada uno de estos parámetros usará un fichero:

  • El parámetro timing guarda los tiempos entre los comandos y la salida de los comandos. Aquí lo explica la ayuda del comando script:

opcion timing comando script linux

 

  • El nombre del fichero de log donde se guardarán los comandos ejecutados

puede ser el nombre que queramos con extensión .log

Ahora lanzamos una sesión que grabe la sesión  con estos dos parámetros, timing y log:
Así:

script --timing=timing.txt session.log

Y en el ejemplo en nuestra máquina:

test@Ubuntu:~$ script --timing=sincronizacion.txt sesion.log

Cuando haya terminado la sesión :

exit
Script terminado; el fichero es sesion.log

 

Así se ve la grabación de una sesión en Linux con el comando script tal como hemos explicado:

grabar sesion terminal linux

 

Reproducir una sesión de terminal grabada en Linux con el comando scriptreplay

 
Y podremos reproducir la sesión con el comando scriptreplay, usando igualmente las opciones timing y log y los dos ficheros anteriores.

Estos dos ficheros se combinan y conseguimos reproducir así la sesión con el comando scriptreplay

scriptreplay --timing=sincronizacion.txt sesion.log

 

 

Cómo grabar las sesiones de terminal para todos los usuarios del sistema en Linux

 
Otra opción muy pero que muy interesante, sobre todo para administradores de sistemas Linux, es la de poder grabar las sesiones de terminal de todos lo usuarios del sistema.
 
Lo podemos conseguir  añadiendo el siguiente código:

if [ "x$SESSION_RECORD" = "x" ]
then
timestamp=$(date +%d-%m-%Y-%T)
session_log=/var/log/session/session.$USER.$$.$timestamp
SESSION_RECORD=started
export SESSION_RECORD
script -t -f -q 2>${session_log}.timing $session_log
exit
fi

 

Dependiendo de la distro que usemos, podemos añadirlo para que se cargue de forma global, en uno de estos ficheros:

/etc/profile

o

~/.profile

o

~/.bashrc

 
Vemos cómo lo hemos añadido en este caso en un Ubuntu, en el fichero ~.bashrc:
grabar todas sesiones usuarios bash linux
 
Y al acceder al directorio que hemos configurado para guardar las sesiones, podemos ver que los archivos de sincronización se crean automáticamente cuando el usuario comienza su sesión en la terminal:
sesiones grabadas /var/log/session
 

 

Los ficheros timing y log

 

Contenido del fichero timing

 
Vemos el contenido del fichero timing, que en nuestro caso hemos llamado sincronizacion.txt:

contenido del fichero timing - comando script

Como decíamos antes, este fichero guarda los tiempos entre los comandos y la salida de los comandos. Cada fila de datos contiene dos campos.

El primer campo muestra cuanto tiempo ha pasado desde la anterior salida de datos por pantalla.

El segundo campo muestra cuantos caracteres se han mostrado por pantalla esta vez.
 

 

Contenido del fichero log

 
grabar las sesiones de terminal en linux - contenido fichero log

Vemos que el fichero de log usado con el comando script para grabar sesiones junto con la info de sincronización, muestra todos los comandos ejecutados y su salida por pantalla.