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
- ¿No sabes cómo instalar Go? Sigue esta guía
El comando anterior instalará el binario GoTTTY en tu variable de entorno GOBIN, intenta comprobar si es así:
ls $GOPATH/bin/
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
La sintaxis general para ejecutar comandos GoTTY es:
gotty [opciones] <Comando Linux aquí>[<argumentos...>]
3.1. Prueba simple de GoTTY
- Comencemos simple con el comando
top
:
gotty top
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
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
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
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