GoTTY Compartir terminal Linux en navegador web
GoTTY Compartir terminal Linux en navegador web

GoTTY: Compartir terminal Linux como aplicación web

El título de esta publicación lo dice todo: GoTTY es un programa que te permite compartir aplicaciones de terminal de Linux en un navegador web. 

GoTTY es un simple servidor web escrito en Go que ejecuta un programa que no es GUI y puede lanzarlo en un socket de tal manera que un navegador lo pueda mostrar y, opcionalmente, permitir que el usuario interactúe con él.

1. ¿Por qué usar GoTTY?

Con el énfasis en la seguridad en estos días, eso debería alarmarte. Después de todo, ¿por qué querrías un shell ejecutándose en un navegador? Pero espera. Si bien eso es posible, y no siempre indeseable, el valor real de esta técnica es ejecutar un programa de línea de comandos específico en una ventana del navegador.

Este es un caso de uso: desea que los usuarios monitoreen un sistema de forma remota utilizando top (o htop, por gusto específico). Pero usted no quiere que los usuarios se conecten al sistema ni que tengan clientes ssh. No desea instalar herramientas de monitoreo, solo usar lo que ya tiene.

Si pudieras conseguir que la salida de top se mostrara en una ventana del navegador, esa sería una solución fácil. Por supuesto, usted podría simplemente ejecutar top en modo batch, recoger la salida, y escribir en algún lugar que un servidor web podría encontrarlo. Asumiendo que tienes un servidor web instalado, por supuesto. Pero entonces, ¿qué pasaría si usted quisiera otras características como tomar opciones de línea de comandos o tener la opción de usuarios autentificados para interactuar con el software? Eso sería más complicado. Con GoTTTY, es mucho más fácil…

2. Instalación de GoTTY

Puede encontrar instrucciones de instalación completas en la página de GitHub. Pero si ya tienes Go, lo más fácil es:

https://github.com/yudai/gotty
go get github.com/yudai/gotty

El comando anterior instalará el binario GoTTTY en tu variable de entorno GOBIN, intenta comprobar si es así:

ls $GOPATH/bin/
GoTTTY en variable de entorno GOBIN
GoTTTY en variable de entorno GOBIN

3. Cómo usar GoTTY en Linux

Para ejecutarlo, puedes utilizar la variable de env de GOBIN y la función de autocompletar del comando de la siguiente manera:

$GOBIN/gotty

De lo contrario, ejecuta GoTTY o cualquier otro programa Go sin escribir la ruta completa al binario, agregue tu variable GOBIN a PATH en el archivo ~/.profile mediante el comando export, así:

export  PATH=$PATH:/usr/local/go/bin
export GOBIN="$GOPATH/bin"
source ~/.profile
Configurar variables de entorno para Go

La sintaxis general para ejecutar comandos GoTTY es:

gotty [opciones] <Comando Linux aquí>[<argumentos...>]
Ejecución de GoTTY
Ejecución de GoTTY

3.1. Prueba simple de GoTTY

  • Comencemos simple con el comando top:
gotty top
Comando top con GoTTY
Comando top con GoTTY

Eso es. top se ejecutará en tu máquina actual en el puerto 8080 (http://127.0.0.1:8080/). No podrás realizar ninguna entrada por lo que no puedes matar procesos ni nada. Si deseas opciones o htop, puedes modificar la línea de comandos. No puedes verlo en una imagen estática, pero la pantalla se actualiza como si se estuvieras ejecutando en un terminal.

El servidor se ejecutará hasta que lo mates. Si no lo enviaste al fondo, un Ctrl + C hará lo necesario. Necesitarás dos pulsaciones Ctrl + C si alguien todavía está conectado al servidor. Obviamente, hay opciones para cambiar el puerto (-p) y la dirección (-a).

  • Ahora ejecute GoTTTY con el comando df para ver el espacio y el uso de las particiones del disco del sistema desde el navegador web:
gotty df -h
Comando df con GoTTY
Comando df con GoTTY

3.2. Permitir ejecutar/escribir comandos en el terminal

Ten en cuenta que, de forma predeterminada, GoTTTY no permite a los clientes escribir entradas en el TTY, sólo permite cambiar el tamaño de las ventanas.

Sin embargo, puedes utilizar la opción -w o --permit-write para permitir que los clientes escriban en el TTY, lo cual no es recomendable debido a amenazas de seguridad en el servidor.

El siguiente comando utilizará el editor de línea de comandos vi para abrir el archivo esgeeks.txt y editarlo en el navegador web:

gotty -w vi esgeeks.txt
Editar archivos en el navegador con gotty
Editar archivos en el navegador con gotty

3.3. Usar GoTTTY con autenticación básica (nombre de usuario y contraseña)

En el primer caso, es probable que no nos importe mucho si extraños al azar pueden ver la salida de top. Por supuesto, también, si la máquina en la que se está ejecutando gotty está detrás de un firewall entrante, los de afuera no pueden verlo de todos modos. Para algunas aplicaciones, eso sería suficiente. Pero, por ejemplo, si permitimos la entrada (la opción -w), las personas podrían eliminar procesos de forma remota. Probablemente no sea una buena idea publicar eso en la Web.

Intenta activar un mecanismo de autenticación básico, donde los clientes deberán introducir el nombre de usuario y la contraseña especificados para conectarse al servidor GoTTTY.

El siguiente comando restringirá el acceso del cliente utilizando la opción -c para solicitar a los usuarios las credenciales especificadas (nombre de usuario: geek y contraseña: @56789):

gotty -w -p "9000" -c "geek:@56789" glances
Uso de GoTTTY con autenticación básica
Uso de GoTTTY con autenticación básica

Nota: La desventaja de -c es que la transacción de seguridad – junto con todos los datos hacia y desde el navegador – son claros. Eso no es lo ideal. Hay una opción -t que puede habilitar TLS/SSL. Puedes leer más sobre esta configuración en la página de GitHub.

3.4. 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.

Utilice también el --title-format “GoTTY – {{ .Command }} ({{ .Hostname }})” para definir el título de la interfaz del navegador web y el comando glances para mostrar las estadísticas de monitorización del sistema:

gotty -r --title-format "GoTTY - {{ .Command }} ({{ .Hostname }})" glances

3.5. Compartir terminal con varios clientes

Otro problema es que podrías tener más de un cliente conectado al servidor. Hay una opción --once que hace que el programa maneje una solicitud y luego salga. Pero la página de GitHub muestra ejemplos de uso de una ventana tmux acoplable para compartir una sesión por usuario o crear nuevas sesiones para cada usuario.

Puede compartir un único proceso con múltiples clientes, el siguiente comando iniciará una nueva sesión de tmux llamada gotty con el comando glances (asegúrate de tener tmux instalado):

gotty tmux new -A -s gotty glances 

4. Comandos finales y conclusión

  • Para leer un fichero de configuración diferente, utiliza la opción -config "/path/to/file" así:
gotty -tr --config "~/gotty_new_config" --title-format "GoTTY - {{ .Command }} ({{ .Hostname }})" glances
  • Para visualizar la versión GoTTTY, ejecute el comando:
gotty -v 

GoTTY es una de esas soluciones que no es para todo, pero cuando necesitas lo que hace, funciona bien y facilita las cosas que de otra manera serían difíciles. No es una mala adición a tu conjunto de herramientas de Linux. ¡Comparte! :’)

https://github.com/yudai/gotty

My Cart Close (×)

Tu carrito está vacío
Ver tienda