GoTTY, comparte la terminal como una aplicación web
En el siguiente artículo vamos a echar un vistazo GoTTY. Se trata de un programa que permite a los usuarios compartir aplicaciones para la terminal de Gnu/Linux a través de un navegador web. GoTTY es un sencillo servidor web escrito en Go que ejecuta un programa que no es GUI, y puede lanzarse de tal manera que un navegador lo pueda mostrar y de forma opcional, permite que el usuario interactúe.
Quizás no todo el mundo encuentre útil la posibilidad de ejecutar un programa de línea de comandos específico en una ventana del navegador. Pero existen algunos casos, como por ejemplo cuando queremos monitorear un sistema de forma remota utilizando top sin tener que conectarse al sistema, en los que puede resultar interesante disponer de esta posibilidad.
Si podemos conseguir que la salida de top se muestre en una ventana del navegador, esta sería una solución muy sencilla. Aun que existen otras opciones para obtener el mismo resultado, puede interesarnos disponer de otras características de la línea de comandos, o tener la opción de utilizar usuarios autentificados para interactuar con el software que se ejecuta. Esto y otras cosas, GoTTY nos va a permitir hacerlo de forma sencilla.
Instalación de GoTTY en Ubuntu
Para poder hacer uso de GoTTY vamos a necesitar tener instalado Go. La mayor parte de las distribuciones Gnu/Linux disponen del lenguaje Go en el repositorio oficial, por lo que podemos instalarlo fácilmente. Para instalarlo y configurarlo en nuestro Ubuntu, hace un tiempo escribimos en este blog un artículo en el que se explica cómo hacerlo de manera sencilla.
También vamos a necesitar instalar Git, lo cual podremos hacer escribiendo en la terminal (Ctrl+Alt+T):
sudo apt install git
Cuando ya disponemos de Go podemos empezar escribiendo lo siguiente. Este comando instalará el binario de GoTTY en tu variable de entorno:
go get github.com/yudai/gotty
Para comprobar que todo ha sido correcto, escribe la siguiente orden:
ls $GOPATH/bin/
Cómo usar GoTTY en Ubuntu
Para ejecutarlo, utilizaremos la siguiente sintaxis:
$GOBIN/gotty [opciones] <comando>
En caso de que no interesa lanzar y compartir el comando top, solo habría que escribir:
$GOBIN/gotty top
El comando top se ejecutará en tu máquina actual en el puerto 8080 (http://127.0.0.1:8080/). Desde el navegador no se verá una imagen estática, la pantalla se actualiza como si se estuviese ejecutando en una terminal.
El servidor se ejecutará hasta que lo mates. Esto se consigue pulsando Ctrl+C. Si alguien está conectado al servidor, se necesitarán dos pulsaciones de Ctrl+C . A este comando se le pueden añadir opciones para cambiar el puerto (-p) y la dirección (-a).
Hay que tener en cuenta que de forma predeterminada, GoTTY no permite a los clientes escribir entradas en el TTY, sólo permite cambiar el tamaño de las ventanas.
Editar un archivo desde el navegador
Vamos a poder utilizar la opción -w o –permit-write para permitir que los clientes escriban en el TTY, lo cual no es recomendable debido a las posibles amenazas de seguridad en el servidor.
El siguiente comando utilizará el editor de línea de comandos vi para abrir el archivo ubunlog.txt y permitirá editarlo desde el navegador web:
$GOBIN/gotty -w vi ubunlog.txt
Usar GoTTY con autenticación básica (nombre de usuario y contraseña)
En el primer caso que acabamos de ver, es probable que no nos importe mucho si extraños pueden ver la salida de top. Si la máquina en la que se está ejecutando GoTTY está detrás de un firewall, los de fuera no van a poder verlo. Para algunas aplicaciones, eso sería suficiente. Pero, si por ejemplo, si permitimos la entrada (con la opción -w), las personas podrían eliminar procesos de forma remota, y esto probablemente no sea una buena idea publicarlo en la Web.
Para intentar poner una especie de solución a a esto, podemos activar un sistema de autenticación básico. Aquí los clientes deberán introducir el nombre de usuario y la contraseña especificados para conectarse al servidor GoTTY.
El siguiente comando restringirá el acceso del cliente utilizando la opción -c y va a solicitar a los usuarios las credenciales especificadas. Para este ejemplo el nombre de usuario será ubunlog y la contraseña @12345.
$GOBIN/gotty -w -p "9000" -c "ubunlog:@12345" top
Generar URL aleatoria en Gotty
Otra forma de restringir el acceso al servidor es usando la opción -r. Aquí, GoTTY generará una URL aleatoria para que sólo los usuarios que la conozcan puedan acceder al servidor.
Las que acabamos de ver, son solo algunas de las cosas que se pueden hacer con GoTTY. Se pueden consultar estas y otras, más en detalle desde la página GitHub del proyecto. Esta es una de esas soluciones que no es para todo, pero si necesitas lo que hace, está bien tener está posibilidad disponible.