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.

execal comienzo de la línea. debería comenzarscript -fen el mismo PID de shell.Respuestas:
Si alguien quiere grabar sus sesiones de terminal automáticamente, incluidas las sesiones SSH (!), Utilizando la
scriptutilidad, aquí le mostramos cómo.Agregue la siguiente línea al final de
.bashrcsu directorio de inicio, o de lo contrario/etc/bash.bashrcsi solo desea grabar todas las sesiones de los usuarios. Probamos que el proceso padre de shell no estéscripty luego lo ejecutamosscript.Para Linux:
Para BSD y macOS, cambie
script -fascript -F:¡Eso es todo!
Ahora, cuando abra una nueva terminal, verá:
scriptescribirá sus sesiones en un archivo en su directorio de inicio nombrándolos como algo como30-Nov-11_00-11-12_shell.logresultado.Más personalización:
script -a /path/to/single_log_filescript -f(Linux) oscript -F(BSD y macOS)Esta respuesta asume que has
scriptinstalado, por supuesto. En distribuciones basadas en Debian,scriptes parte delbsdutilspaquete.fuente
editbotó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}.logpara 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
scriptejecució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_keysarchivo del usuario , delante de la clave:El script
log-session( archivado ) decide si se ejecuta o no/usr/bin/scriptpara registrar la sesión de este usuario.Para evitar que el usuario elimine el comando agregado, el administrador deberá asumir la propiedad del
authorized_keysarchivo 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