376 - El historial de la terminal en la nube
¿Sería posible acceder al historial de la terminal de todos tus equipos? Si, puedes tener el historial de la terminal en la nube.
Una de las operaciones que hago con mas asiduidad es buscar en el historial de la terminal. Y no es que lo haga de vez en cuando, es que lo hago varias decenas, por no decirte centenares de veces al día. ¿El historial de la terminal? Por si las moscas, y para no despistarnos con la terminología, me explico a que me refiero con lo del historial de la terminal. Cada vez que ejecutas un comando en la terminal, este se guarda. Puedes recuperar este historial con el comando history
o utilizando el atajo de teclado Ctrl+r
. A esto me refiero con el historial. Como te puedes imaginar el historial es propio de cada máquina. Y esto es una lástima, porque a mi, me gustaría tener, al alcance de mis dedos, el historial de lo que ejecuto en la Raspberry, o el historial de lo que ejecuto en los servidores… ¿Sería posible tener todos los historiales agrupados? Si, es posible tener el historial de la terminal en la nube.
Como lo oyes, es posible tener el historal de la terminal en la nube. Y no solo el historial de una máquina, sino lo mas interesante, puedes tener el historial de todas las máquinas que quieras. Y no solo de distintas máquinas, sino también de distintas sesiones. De esta forma, ya no te tienes que preocupar, de en que máquina estás, ni de que sesión tienes abierta. Estés donde estés puedes consultar el historial de todas tus máquinas, porque el historial de la terminal está en la nube.
El historial de la terminal en la nube
Ojo al dato.
Que buena aplicación tiene esta expresión aquí ojo al dato. Y como digo, nunca mejor dicho. Tienes que tener en cuenta que todo lo que hagas en tu terminal, o mejor dicho en todas las terminales de todas tus máquinas donde tengas este servicio funcionando se subirá a la nube, con lo que cualquiera que tenga acceso a la nube, puede ver todos los comandos que ejecutes. Y aunque es una mala práctica el utilizar contraseñas en plano cuando hacemos llamadas, lo cierto es que suele ser una práctica habitual. Así que si de normal tienes que tener cuidado, en este caso tienes que tener mas cuidado todavía si cabe.
De cualquier forma, mi recomendación es que montes este servicio en local, en una red local, de forma que solo haya acceso a este servicio desde la red local si salida al exterior. Así tienes lo mejor de los dos mundos, seguridad por un lado y sincronización por el otro.
Bashhub
Bashhub es un servicio que está compuesto de dos piezas. El lado del cliente, que es el que se ejecutará en cada una de las máquinas que quieras tener tu historial sincronizado en la nube. Por otro lado está la parte del servidor que al fin y al cabo es donde se guardan todos esos comandos y lo que hace de nube.
El cliente
Bashhub se encarga de guardar cada uno de los comandos que introduces en la terminal. En cada una de las sesiones y en cada uno de los sistemas donde lo tengas instalado. Esto te da el poder de realizar consultas transversales, entre diferentes sesiones y sistemas. Con Bashhub, no dependes de la máquina en la que te encuentres. Puedes realizar consultas con independencia de la máquina en la que lo hiciste. Este cliente lo puedes utilizar con Bash, Fish y Zsh.
Además de guardar cada uno de los comandos que ejecutas, Bashhub guarda información adicional, como es,
- la sesión
- el estado de la salida
- el directorio
- donde fue creado
Instalación.
La instalación es tremendamente sencilla, aunque el comando es función de la shell que estés utilizando. También depende de la versión de Python. En mi caso particular tuve que modificar el script por que no admitía la versión de Python que tengo instalado en mi equipo. Pero nada del otro mundo. Así,
- Para Bash
curl -OL https://bashhub.com/setup && bash setup
- En el caso de Zsh
curl -OL https://bashhub.com/setup && zsh setup
- Y para Fish
curl -OL https://bashhub.com/setup; and fish setup
Uso y funcionamiento
Bashhub tiene dos comandos fundamentales,
bh
que es con el que tienes que realizar las búsquedasbashhub
es el encargado de realizar las gestiones. Gestiones como conocer el estado
bashhub
Este primer comando se encaga de la parte de logística. Es decir, se encarga de todo lo que tiene que ver con la instalación, estado y funcionamiento de esta herramienta. Así, tienes las siguientes acciones,
filter
comprueba si existen comandos filtradoson
activa el registro de comandos y su subida a la nubeoff
desactiva el registro de comandos.save
registra un comando concretosetup
ejecuta la configuraciónstatus
muestra estadísticas sobre el uso de la herramienta.
Como ves son todo opciones y herramientas para tener en funcionamiento tu sistema con Bashhub, pero realmente no te serán de utilidad para la realización de búsquedas. Sin embargo, si que los tienes que tener muy en mente, para el momento en el que quieras dejar de registrar tus comandos o que lo quieras volver a activar.
De la misma forma, lo tienes que tener igualemente presente para el caso de que filtres algunos comandos. Esto es importante, para evitar volverte loco, algo que sucede en ocasiones, cuando no recuerdas que realizaste una configuración concreta.
Así, por ejemplo puedes filtrar determinados comandos, de forma que cuando introduzcas esos comandos no se registren. Para activar los filtros, tienes que utilizar la variable de entorno BH_FILTER
. Por ejemplo, si no quieres que se registre ningún comando ssh
, tienes que hacer lo siguiente,
export BH_FILTER="(ssh)"
Como te he indicado anteriormente, si quieres comprobar que tienes configurado en el filtro, tienes que utilizar el comando bashhub filter
.
Además, si quieres utilizar un filtro de forma ocasional, puedse añadir #ignore
al final de la línea de comandos que quieras evitar que se registre.
bh
Para realizar una búsqueda entre los comandos que has introducido simplemente tienes que ejecutar bh
, lo que te devolverá los últimos 100 comandos que hayas introducido. Si quieres modificar el número de comandos, tanto al alza como a la baja, tienes que utilizar -n
seguido por el número de resultados a obtener. Sin embargo, esto no es nada mas que la punta del iceberg. Algunos ejemplos,
bh -n 20 "grep"
devuelve los últimos 100 comandos que contengangrep
bh -i "wget github"
te permite realizar una búsqueda interactiva
Pero como te he comentado anteriormente, además de los comandos que introduces, también se añade información contextual. Entre esta información contextual, se encuentra por ejemplo el directorio. Así, por ejemplo, puedes obtener un listado de los comandos que ejecutaste en el directorio en el que te encuentras,
bh -d -n 20
O también en función del sistema o del equipo en el que lo ejecutaste. Al fin y al cabo, en ocasiones, sabes que algo lo ejecutaste en el equipo que te encuentras, y lo que quieres hacer es filtrar, para que solo aparezcan esos resultados. Esto lo puedes hacer utilizando la opción -sys
.
Otro detalle importante, es que no te muestra todos los resultados. Es decir, si hay resultados repetidos los omite. Esto en ocasiones no puede ser lo mas interesante, con lo que si quieres mostrar también los resultados repetidos tienes que utilizar la opción -dups
.
El servidor
Hasta ahora, en todo momento hemos hablado del lado del cliente, pero ¿donde van los comandos?. Inicialmente todo esto está pensado para que tus comandos vayan a bashhub.com. Todos los comandos son privados y la base de datos está cifrada. Sin embargo, creo que todo esto es suficientemente sensible para que esté alojado en tu propio servidor. Algo que es relativamente sencillo.
Existe la posibilidad de que levantes tu propio servidor de forma sencilla, y que además añade algunas características adicionales al servidor por defecto. Entre las características cabe mencionar,
- Realmente sencillo de implementar y sustituir el servicio original
- Las ventajas de tener todos tus comandos registrados, pero en tu propia casa
- Búsqueda mediante expresiones regulares
- Permite importar de
bashhub.com
. - Facil de conectar cualquier cliente
- Implementado en Go.
Instalación
En la página del desarrollador, te indican varios sistemas para instalar el servidor, pero como te puedes imaginar, me decanto por instalarlo utilizando Docker
y en concreto y como es costumbre, detrás de un proxy inverso, por aquello, de que no será el único servicio que levantemos.
En mi repositorio de Gitub, te muestro como instalarlo tanto detrás de Caddy como detrás de Traefik. Una configuración sencilla, que es cuestión de coser y cantar.
Base de datos
Por defecto todos los comandos se guardan en una base de datos SQLite, aunque fácilmente puedes cambiar a una base de datos Postgresql. En mi caso particular, no me caliento mucho la cabeza, porque solo voy a utilizar un cliente de forma concurrente, y además no quiero tener mas de 10.000 registros. Tengo que acordarme de hacer un proceso para limpiar la base de datos….
Lo que me gusta de tenerlo en SQLite, es que en cualquier momento puedo volcar los datos de forma muy sencilla, y tenerlo en texto plano o de cualquier otra forma…. Aunque cierto es que con Postgresql también lo podría hacer fácil.
Clientes
En el caso de que te decidas por esta solución, en cada uno de los clientes que tengas tienes que definir una variable de entorno tal y como te muestro a continuación,
export BH_URL=https://bashhub.tuservidor.es
Conclusión
Se trata de una solución que me gusta y me gusta mucho, las cosas como son. Sin embargo, lo que no me termina de convencer, es utilizar el cliente por defecto. Eso a pesar de que está cifrado. Ya sabes que lo que está cifrado hoy, puede ser transparente el día de mañana.
Por otro lado, alojar el servidor en una red local, compartiendo los datos entre todos, me parece algo realmente especular, porque esto hace de concentrador de conocimiento, sobre todo con el uso de expresiones regulares. ¿Cuantas veces te ha pasado buscando en tu propio historial encontrar un comando que no recordabas? Pues imagina lo mismo pero con varios compañeros.
Más información,
Espero que te haya gustado este nuevo episodio del podcast. Si puedes, te agradecería una valoración en iVoox y/o en Apple Podcast.
me ha gustado mucho el podcast. +1 suscriptor.
un saludo
Acabo de descubrir este site.Muy interesante la información que aportas.seguire explorando y comentando todo lo que vaya viendo. Para ayudar al autor y animar a otras personas que se quieran introducir en este mundo de linux