GoTTY: comparta su terminal Linux (TTY) como una aplicación web


GoTTY es una sencilla herramienta de línea de comandos basada en GoLang que le permite compartir su terminal (TTY) como una aplicación web. Convierte herramientas de línea de comandos en aplicaciones web.

Emplea el emulador de terminal de Chrome OS (hterm) para ejecutar una terminal basada en JavaScript en un navegador web. Y lo que es más importante, GoTTY ejecuta un servidor de socket web que básicamente transfiere la salida del TTY a los clientes y recibe la entrada de los clientes (es decir, si se permite la entrada de los clientes) y la reenvía al TTY.

Su arquitectura (hterm + idea de socket web) se inspiró en el programa Wetty que habilita el terminal a través de HTTP y HTTPS.

Debe tener el entorno GoLang (Go Programming Language) instalado en Linux para ejecutar GoTTY.

Cómo instalar GoTTY en sistemas Linux

Si ya tiene un entorno GoLang en funcionamiento, ejecute el comando go get a continuación para instalarlo:

# go get github.com/yudai/gotty

El comando anterior instalará el binario de GoTTY en su variable de entorno GOBIN, intente verificar si ese es el caso:

# ls $GOPATH/bin/

Cómo usar GoTTY en Linux

Para ejecutarlo, puede usar la variable env de GOBIN y la función de autocompletado de comandos de la siguiente manera:

# $GOBIN/gotty

De lo contrario, ejecute GoTTY o cualquier otro programa Go sin escribir la ruta completa al binario, agregue su variable GOBIN a PATH en el archivo ~/.profile usando el comando de exportación a continuación:

export PATH="$PATH:$GOBIN"

Guarde el archivo y ciérrelo. Luego, obtenga el archivo para efectuar los cambios anteriores:

# source ~/.profile

La sintaxis general para ejecutar comandos de GoTTY es:

Usage: gotty [options] <Linux command here> [<arguments...>]

Ahora ejecute GoTTY con cualquier comando, como el comando df, para ver el espacio y el uso de las particiones del disco del sistema desde el navegador web:

# gotty df -h

GoTTY iniciará un servidor web en el puerto 8080 de forma predeterminada. Luego abra la URL: http://127.0.0.1:8080/ en su navegador web y verá el comando en ejecución como si se estuviera ejecutando en su terminal:

Cómo personalizar GoTTY en Linux

Puede modificar las opciones predeterminadas y su terminal (hterm) en el archivo de perfil ~/.gotty , cargará este archivo por defecto en caso de que exista.

Este es el archivo de personalización principal leído por los comandos de gotty, así que créelo de la siguiente manera:

# touch ~/.gotty

Y establezca sus propios valores válidos para las opciones de configuración (encuentre todas las opciones de configuración aquí) para personalizar GoTTY, por ejemplo:

// Listen at port 9000 by default
port = "9000"

// Enable TSL/SSL by default
enable_tls = true

// hterm preferences
// Smaller font and a little bit bluer background color
preferences {
    font_size = 5,
    background_color = "rgb(16, 16, 32)"
}

Puede configurar su propio archivo index.html usando la opción --index desde la línea de comando:

# gotty --index /path/to/index.html uptime

Cómo usar las funciones de seguridad en GoTTY

Debido a que GoTTY no ofrece seguridad confiable de manera predeterminada, debe usar manualmente ciertas funciones de seguridad que se explican a continuación.

Tenga en cuenta que, de forma predeterminada, GoTTY no permite que los clientes ingresen datos en el TTY, solo habilita el cambio de tamaño de la ventana.

Sin embargo, puede usar la opción -w o --permit-write para permitir que los clientes escriban en el TTY, lo cual no se recomienda debido a amenazas a la seguridad del servidor.

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

# gotty -w vi fossmint.txt

A continuación se muestra la interfaz vi como se ve desde el navegador web (use los comandos vi aquí como de costumbre):

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

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

# gotty -w -p "9000" -c "test:@67890" glances

Otra forma de restringir el acceso al servidor es usando la opción -r . Aquí, GoTTY generará una URL aleatoria para que solo los usuarios que conocen la URL puedan acceder al servidor.

También use la opción –title-format “GoTTY - {{.Command}} ({{.Hostname}})” para definir el título de la interfaz del navegador web y el comando Glances se usa para mostrar las estadísticas de monitoreo del sistema:

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

El siguiente es el resultado del comando anterior como se ve desde la interfaz del navegador web:

Debido a que, de forma predeterminada, todas las conexiones entre el servidor y los clientes no están encriptadas, cuando envía información secreta a través de GoTTY, como credenciales de usuario o cualquier otra información, debe usar -t o - -tls opción que habilita TLS/SSL en la sesión:

GoTTY leerá de forma predeterminada el archivo de certificado ~/.gotty.crt y el archivo de clave ~/.gotty.key , por lo tanto, comience por crear también una certificación autofirmada. como el archivo de clave usando el comando openssl a continuación (responda la pregunta para generar el certificado y los archivos de clave):

# openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout ~/.gotty.key -out ~/.gotty.crt

Luego, use GoTTY de manera segura con SSL/TLS habilitado de la siguiente manera:

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

Puede hacer uso del comando glances (asegúrese de tener tmux instalado):

# gotty tmux new -A -s gotty glances 

Para leer un archivo de configuración diferente, use la opción –config “/ ruta/a/archivo” así:

# gotty -tr --config "~/gotty_new_config" --title-format "GoTTY - {{ .Command }} ({{ .Hostname }})" glances

Para mostrar la versión de GoTTY, ejecute el comando:

# gotty -v 

Visite el repositorio de GoTTY GitHub para encontrar más ejemplos de uso: https://github.com/yudai/gotty

¡Eso es todo! ¿Lo ha probado? ¿Cómo encuentras GoTTY? Comparta sus pensamientos con nosotros a través del formulario de comentarios a continuación.