tmate: compartiendo la terminal en Internet

Publicado por Diego Córdoba en

Tmate es una poderosa herramienta que nos permite compartir nuestra terminal de comandos con cualquier otro usuario Linux que posea un cliente SSH.

Sí, tmate puede ser instalado en cualquier sistema Linux, está liberado bajo licencia del MIT, y es de código abierto. Surgió como un fork de tmux, la conocida aplicación de línea de comandos que permite multiplexar diferentes sesiones de terminal en la misma ventana o aplicación.

Instalando tmate en Linux

Podemos instalarlo en Arch desde los repos AUR:

yaourt -S tmate

En Ubuntu podemos hacerlo:

sudo apt-get install software-properties-common
sudo add-apt-repository ppa:tmate.io/archive
sudo apt-get update
sudo apt-get install tmate

Y por supuesto, podemos compilarlo desde los fuentes.

Luego de descargarlo desde https://github.com/nviennot/tmate, o clonarlo con git. Luego simplemente compilamos e instalamos:

./autogen.sh
./configure
make
make install

Además, provee varios binarios precompilados si solo queremos descargar y ejecutar el paquete:

https://github.com/tmate-io/tmate/releases/

Conectando nuestra terminal

tmate

En la terminal de comandos simplemente podemos correr el comando tmate para lanzar el servicio y entrar a una nueva sesión de terminal:

Al principio en la línea inferior, que ahora aparece en verde, veremos un token ssh… ese será utilizado por los clientes que quieran conectarse a nuestra terminal. Podemos ver esa información con el subcomando «tmate show-messages" dentro de la terminal:

tmate

Como se puede ver, en estos mensajes nos da información importante (y muy interesante :-))

  • Web Session read only: le permite a un usuario cualquiera entrar a un navegador utilizando la URL provista, y ver nuetra terminal en modo solo lectura.
  • SSH Session read only: idem al anterior, pero el usuario se conectará mediante su cliente SSH en una terminal Linux.
  • Web Session: el usuario que utilice un navegador para entrar al link provisto podrá ver y utilizar nuestra terminal!
  • SSH Session: idem, pero el usuario cliente lo hará desde su cliente SSH.

Haciendo magia!

¿Cómo conecta un usuario cliente a nuestra terminal? Simple, con un cliente SSH, o mediante un navegador web, y en ambos casos, puede hacerlo tanto en solo lectura como en lectura-escritura, dependiendo del link que le pasemos 🙂

Por ejemplo, si queremos que un determinado usuario en Internet conecte contra nuestra terminal y vea lo que hacemos, sin poder modificar ni cambiar ningún comando, podemos pasarle el comando provisto en la salida anterior… en este caso particular (el token cambiará según la ejecución):

selection_05

Y el usuario verá algo similar a esto:

diegocryptos-_06

Automáticamente, estará viendo todo lo que estamos escribiendo en nuestra terminal!

Alternativamente, también podemos pasarle la URL para que entre vía web, ya sea en solo lectura, o lectura escritura… sí, desde un navegador estará ejecutando comandos en nuestra terminal, o viendo lo que hacemos! ¿No es mágico? 😛

tmate-qupzilla_07

Corriendo como daemon

Esta poderosa herramienta permite correr en nuestro ordenador en modo daemon, des-asociado de toda terminal de comandos… lo que nos permite conectar un cliente sabiendo los tokens, desde cualquier lugar en Internet, ya sea en forma de navegador web como en conexión ssh!

Sabiendo los tokens, cualquiera podría conectarse a nuestro ordenador en una terminal… pensemos en tmate como un túnel ssh reverso que es accesible desde cualquier lugar!

Manos a la obra:

Ejecutamos tmate en modo detached, es decir, como daemon, en segundo plano:

tmate -S /tmp/tmatesock new-session -d

Es importante especificar con el modificador «-S» el nombre del socket que utilizaremos, ya que por defecto utiliza nombres de sockets aleatorios, y en nuestro caso luego debemos invocar al socket para poder comunicarnos con el daemon y recibir las claves y tokens.

Levantamos ahora el socket y lo dejamos escuchando:

tmate -S /tmp/tmatesock wait tmate-ready

Y por último, podemos «preguntarle» vía socket al tmate_ por los tokens de conexión para luego utilizarlos exactamente igual que antes. Esto podemos hacerlo de la siguiente forma:

tmate -S /tmp/tmatesock display -p '#{tmate_ssh}'    # Cadena de conexión SSH
tmate -S /tmp/tmatesock display -p '#{tmate_ssh_ro}' # Cadena de conexión SSH en modo solo lectura
tmate -S /tmp/tmatesock display -p '#{tmate_web}'    # URL de conexión web
tmate -S /tmp/tmatesock display -p '#{tmate_web_ro}' # URL de conexión web en modo solo lectura

Y listo! Luego, desde cualquier ubicación con conexión a Internet podemos conectarnos via ssh o web a nuestro ordenador!

Consideraciones

Al compartir una terminal, ya sea en modo lectura o lectura-escritura, tener antes la precaución de limpiarla, ya que si ejecutamos el subcomando «show-messages«, cualquier usuario que se conecte con cualquier token verá los tokens de lectura-escritura y las url’s web!

Por otro lado, y para los que están pensando en consideraciones de seguridad y privacidad… tanto quien comparte su terminal, como los clientes establecen las conexiones cifradas contra tmate.io. No obstante, podemos levantar nuestro propio nodo de tmate en una URL y utilizarlo… para estar más seguros 🙂

En otro artículo hablaremos de dos aspectos adicionales:

  • Cómo levantar nuestra propia instancia de _tmate
  • Analizaremos los detalles técnicos de conectividad de _tmate, protocolos y cifrado.

¡Espero que les resulte de utilidad como a mi!


Video complementario

Ahora sí, el video donde explico el funcionamiento de esta gran herramienta!

Espero les sea de utilidad, y ya saben, quedan invitados a sumarse al canal de youtube de JuncoTIC y a nuestro canal de Telegram!


¿Preguntas? ¿Comentarios?

Si tenés dudas, o querés dejarnos tus comentarios y consultas, sumate al grupo de Telegram de la comunidad JuncoTIC!
¡Te esperamos!


Diego Córdoba

- Ingeniero en Informática - Mg. Teleinformática - Tesis pendiente - Docente universitario - Investigador

6 comentarios

Javier · 13 septiembre, 2016 a las 19:56

Muy buena herramienta Diego, sería bueno verlo pronto en las capacitaciones de JuncoTIC 🙂 si no hay mucho consumo de ancho de banda quizás sea una mejor alternativa para las capacitaciones donde vemos el uso de terminal y configuración de servicios, etc; se me ocurre combinarla con mumble para el audio en vivo y ya se tendría una plataforma bastante libre y operativa… 🙂

    Diego Córdoba · 14 septiembre, 2016 a las 04:22

    Gracias por las sugerencias Javier!! Por supuesto que lo voy a tener en cuenta… no he probado mumble para el audio, así que voy a investigar… y sí, la idea sería en algún momento disponer de una plataforma en línea basada únicamente en software libre u open source. Manos a la obra! Abrazo!

Ozlanog Zuir · 2 octubre, 2016 a las 22:31

Ahora puedes bajar tmate ahora no necesitas compilar tmate viene con el instalador para ejecutarlo, solo hay que moverlo a la carpeta /usr/bin para ejecutarse, probado desde opensuse leap 42 64 bits.

    Diego Córdoba · 3 octubre, 2016 a las 15:06

    Muchas gracias por el dato! Desde qué URL estás descargando el binario? Saludos!

Ozlanog Zuir · 3 octubre, 2016 a las 17:45

Desde aqui, esta en la página oficial, static builds

https://github.com/tmate-io/tmate/releases/tag/2.2.1

    Diego Córdoba · 3 octubre, 2016 a las 18:07

    Gracias! A mas de uno seguro va a servirle!

Los comentarios están cerrados.