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

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

Simplemente compilamos e instalamos:

./autogen.sh && \
./configure  && \
make         && \
make install

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

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

Conectando nuestra terminal

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

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 «show-messages» dentro de la terminal:

tmate

Como se puede ver, en estos mensajes nos da información importante (y muuy 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 invitasos a sumarse al canal de youtube de juncotic.com dando clic acá!


Diego Córdoba

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