Lo que quiero lograr es poder grabar mis sesiones de terminal para archivarlas automáticamente cada vez que use Yakuake / Konsole.
Es fácil de lograr si al comienzo de mi sesión hago:
script -f /home/$USER/bin/shell_logs/$(date +"%d-%b-%y_%H-%M-%S")_shell.log
Pero quiero ejecutar lo anterior automáticamente cada vez que inicio Yakuake o abra una nueva pestaña.
El uso de .bashrc no funciona porque crea un bucle sin fin ya que 'script' abre una nueva sesión, que a su vez lee .bashrc e inicia otro 'script' y así sucesivamente.
Por lo tanto, presumiblemente necesito guiar a Yakuake / Konsole de alguna manera para ejecutar 'script' una vez que se abre una nueva pestaña. La pregunta es cómo.
exec
al comienzo de la línea. debería comenzarscript -f
en el mismo PID de shell.Respuestas:
Si alguien quiere grabar sus sesiones de terminal automáticamente, incluidas las sesiones SSH (!), Utilizando la
script
utilidad, aquí le mostramos cómo.Agregue la siguiente línea al final de
.bashrc
su directorio de inicio, o de lo contrario/etc/bash.bashrc
si solo desea grabar todas las sesiones de los usuarios. Probamos que el proceso padre de shell no estéscript
y luego lo ejecutamosscript
.Para Linux:
Para BSD y macOS, cambie
script -f
ascript -F
:¡Eso es todo!
Ahora, cuando abra una nueva terminal, verá:
script
escribirá sus sesiones en un archivo en su directorio de inicio nombrándolos como algo como30-Nov-11_00-11-12_shell.log
resultado.Más personalización:
script -a /path/to/single_log_file
script -f
(Linux) oscript -F
(BSD y macOS)Esta respuesta asume que has
script
instalado, por supuesto. En distribuciones basadas en Debian,script
es parte delbsdutils
paquete.fuente
edit
botón que aparece justo debajo de él.${RANDOM}
y / o$$
al nombre del archivo, ya que comenzar dos shells dentro de un segundo uno del otro provocará una colisión del nombre del archivo. Personalmente, a menudo lo usoscript.$(date -u +%Y%m%dt%H%M%S).${HOSTNAME:-$(hostname)}.$$.${RANDOM}.log
para garantizar que los archivos se ordenen automáticamente por fecha / hora y sean coherentes entre TZ, conozco el host que lo inició, sé el proceso de propiedad y no hay colisiones de nombres. Raramente uso${USER}
porque es típicamente algo para mí solo.Aunque esta pregunta fue formulada por un individuo que deseaba grabar sus propias sesiones, un caso de uso alternativo podría ser un administrador del sistema que quisiera hacer un seguimiento de lo que están haciendo varios usuarios.
Un enfoque alternativo
Esta guía de 2008 ( archivada ) utiliza un método diferente para forzar la
script
ejecución cuando un usuario inicia sesión con ssh, lo que requiere que los usuarios inicien sesión con una clave pública / privada.Esto se hace agregando un script al
.ssh/authorized_keys
archivo del usuario , delante de la clave:El script
log-session
( archivado ) decide si se ejecuta o no/usr/bin/script
para registrar la sesión de este usuario.Para evitar que el usuario elimine el comando agregado, el administrador deberá asumir la propiedad del
authorized_keys
archivo del usuario .Desafortunadamente, esto significa que el usuario no podrá agregar ninguna clave adicional por sí mismo o, lo que es más importante, revocar la clave existente si está comprometida, lo que dista mucho de ser ideal.
Advertencias
Es común que la configuración predeterminada de sshd permita a los usuarios realizar SFTP a través de su inicio de sesión ssh. Esto ofrece a los usuarios una forma de editar archivos sin que se registren los cambios. Si el administrador no quiere que los usuarios puedan hacer eso, entonces debe habilitar algún registro para SFTP o deshabilitar el servicio. Aunque incluso entonces, los usuarios aún podrían hacer cambios invisibles en los archivos ejecutando algo como esto en su terminal:
Es posible monitorear cambios como ese mediante el uso de un sistema de archivos de copia en escritura que registra todo el historial de archivos.
Pero un truco similar permitiría a un usuario ejecutar comandos sin que se registren:
No conozco ninguna solución fácil para eso. Las posibilidades pueden ser:
Este tipo de cosas podría ser posible con auditado .
Pero de todos modos...
fuente
En lugar de:
Yo usaría:
Las comillas dobles no son necesarias en este caso, pero tiendo a usarlas de todos modos como una práctica estándar. Definitivamente recomiendo usar el interruptor "x" para grep y pgrep, para evitar una coincidencia rara pero problemática con subcadenas.
fuente