Page cover

Comunicación mediante CLI

Con las nuevas tecnologías y el uso de mensajería instantánea quizás ya no tenga sentido pero siempre es interesante conocer estos métodos de comunicación para administradores de sistemas. Para ello nos vamos a servir de diferentes herramientas disponibles en sistemas GNU/Linux.

Enviar mensajes a todos los usuarios utilizando Wall

Con la herramienta wall podemos enviar mensajes a todos los usuarios conectados al sistema, muy útil para equipos con el rol de servidor o de máquina de salto para otros sistemas.

Por ejemplo:

sudo wall "Debido a tareas de mantenimiento, en una hora reiniciaremos el sistema."

También podemos utilizar la salida estándar, de la siguiente manera:

echo "Debido a tareas de mantenimiento, en una hora reiniciaremos el sistema." | wall

Este mensaje les llegará a otros usuarios registrados en ese momento en el sistema, incluso si ahora mismo están en otro sistema, pero han utilizado el host como máquina de salto, vía ssh.

Enviar un mensaje a un usuario en particular con write

Para enviar un mensaje a un usuario en particular podemos utilizar la herramienta write, para ello primero debemos saber cuales son los usuarios conectados, utilizando el comando who, como se muestra en el ejemplo.

Usuarios conectados en el momento

De esta manera ya podemos enviar el mensaje:

write pepe pts/1 #usa CTROL+D para terminar de enviar mensajes

Esto solo generará una comunicación unidireccional, si queremos comunicarnos en ambas direcciones deberemos usar una herramienta externa.

Conversación en directo con talk

Una tercera opción es utilizar la herramienta talk, este usa el protocolo de Internet Control Message Protocol (ICMP) y TCP/UDP para establecer la conexión:

  1. Protocolo utilizado:

    • Inicialmente, talk usa ICMP para verificar si el otro usuario está en línea.

    • Luego, usa el puerto 517/UDP en el servidor talkd (daemon) para gestionar las conexiones.

    • La comunicación entre los clientes se da en puertos dinámicos UDP.

  2. Demonio asociado:

    • talk se comunica con talkd, que escucha en el puerto 517/UDP y coordina la sesión.

Por norma general debemos instalarlo, ya que no viene por defecto en el sistema.

apt-get install talk talkd

A diferencia de las otras herramientas, con talk podemos entablar una conversación con otro usuario, como si fuese un chat.

Su forma de uso es:

talk persona [ttynombre]

Caso de ejemplo

Vamos a usar esto para establecer una comunicación entre dos usuarios de un servidor

Primeramente necesitaremos crear más de un usuario:

sudo useradd -m -s /bin/bash pepe
sudo useradd -m -s /bin/bash maria

sudo passwd pepe
sudo passwd maria

Podemos ahora acceder con shells paralelas o a través de sesiones remotas de telnet o ssh.

Ahora es tan simple como:

#Desde mi usuario pepe
talk maria@localhost

A la usuaria maria le llegará una solicitud de conexión de este tipo:

Mensaje de solicitud de comunicación

Ahora simplemente deberá responder tal y como aparece en la última línea (talk ubuntu@localhost).

Talk es una herramienta antigua que ya no se usa, actualmente hemos evolucionado a la mensajería moderna: irc, XMPP, tmux, weechat, etc

SSH chat

SSH Chat es un sistema de chat basado en SSH que permite a los usuarios conectarse a un servidor y comunicarse de manera segura sin necesidad de instalar software adicional más allá de un cliente SSH. Funciona como una alternativa minimalista y encriptada a IRC o a mensajerías tradicionales.

Para comprender como funciona:

  1. El servidor de chat actúa como un servidor SSH

    • Se ejecuta un proceso en el servidor que escucha conexiones SSH.

    • En lugar de iniciar una sesión de shell, muestra un entorno de chat en la terminal.

  2. Los clientes se conectan usando SSH

    • Cualquier usuario con acceso al servidor puede unirse con un simple comando.

    • No requiere una cuenta específica, ya que se puede acceder como un usuario anónimo o autenticado.

  3. Cifrado automático con SSH

    • Todo el tráfico está protegido con el cifrado de SSH.

    • No es necesario configurar TLS o SSL por separado.

  4. Sistema de usuarios y roles

    • Los administradores pueden gestionar permisos y moderar el chat.

    • Se pueden usar claves SSH para verificar identidades y evitar usuarios anónimos.

1. Instalar ssh-chat en el Servidor

Primero, accedemos al servidor y descargamos la aplicación de su github que tendremos que descomprimir y mover a la carpeta de binarios:

wget https://github.com/shazow/ssh-chat/releases/download/v1.10/ssh-chat-linux_amd64.tgz
tar -xvzf ssh-chat-linux_amd64.tgz
chmod +x ssh-chat
sudo mv ssh-chat /usr/local/bin/ssh-chat

Verifica que la instalación funcionó:

ssh-chat --help

2. Crear usuarios para el chat

Es recomendable ejecutar ssh-chat con un usuario sin privilegios para evitar problemas de seguridad, yo crearé el usuario "chat-admin" al que luego le asignaremos una contraseña:

sudo useradd -m -s /bin/bash chat-admin
sudo passwd chat-admin

Cambia al usuario root y genera claves de ssh para el usuario chat-admin:

sudo su -
su - chat-admin
ssh-keygen -t rsa -b 4096 -o -a 100 -f ~/.ssh/id_rsa_sha2

3. Ejecutar el Servidor de Chat

Con un usuario creado, toca proceder con el servidor de chat, para ello debemos iniciar una instancia del chat en el puerto 2222 (ya que el 22 está ocupado por OpenSSH):

ssh-chat --bind :2222

En tu usuario por defecto te funcionará pero si quieres usar el usuario recién creado ardilla debes especificar un archivo de claves permitidas (si tienes problemas con esto, revisa en la guía):

ssh-chat --bind :2222 --identity ~/.ssh/id_rsa_sha2

Si todo ha ido bien deberías recibir un mensaje de "Listening for connections on [::]:2222"


4. Conectar Clientes al Chat

Desde cualquier equipo con SSH, ahora trataremos de conectarnos al chat abierto en el puerto correspondiente (ten en cuenta la redirección de puertos si estas en una MV en red NAT):

ssh -p 2222 ubuntu@IP_DEL_SERVIDOR

En el caso que no funcione directamente puedes usar el Tabby para conectarte o bien descargar la clave privada y usar la clave privada en vez de contraseña

Tengo que investigar por que esto ya no funciona con usuarios locales sino con cualquier nombre que le pases


5. Hacer que ssh-chat se ejecute en segundo plano

Para que el servidor siga activo tras cerrar la terminal, pondremos la tarea en segundo plano:

ssh-chat --bind :2222 &

Siempre puedes cancelarla con:

kill %1

6. Hacer que ssh-chat se ejecute automáticamente al iniciar el servidor

Para hacer que por defecto se active el chat para el servidor y siga activo, podemos crear un servicio systemd para que ssh-chat arranque con el sistema. Para ello, crearemos un archivo de servicio:

sudo nano /etc/systemd/system/ssh-chat.service

Al que añadiremos el siguiente contenido (tal y como dice la documentación):

[[Unit]
Description=SSH Chat Server
After=network.target

[Service]
User=chat-admin
ExecStart=/usr/local/bin/ssh-chat --bind :2222 --identity "/home/chat-admin/.ssh/id_rsa_sha2" --admin "/home/chat-admin/.ssh/id_rsa_sha2.pub"
Restart=always
ProtectHome=yes
NoNewPrivileges=yes

[Install]
WantedBy=multi-user.target

Guardar el archivo y habilitamos el servicio:

sudo systemctl daemon-reload
sudo systemctl enable ssh-chat
sudo systemctl start ssh-chat

Verificar que está corriendo:

sudo systemctl status ssh-chat

Para pararlo hasta que se reinicie el servidor será tan sencillo como:

sudo systemctl stop ssh-chat

EXTRA: Comandos en el chat

Dentro del chat, puedes usar comandos para realizar acciones, estos comandos los puedes ver con /help, algunos ejemplos son:

  • /nick MiNombre → Cambiar tu nombre.

  • /msg usuario mensaje → Enviar mensaje privado.

  • /kick usuario → Expulsar a alguien.

  • /ban usuario → Bloquear a alguien.

Última actualización