ClusterSSH o cómo manejar varias sesiones SSH de forma concurrente

Muchas veces para preparar un DDoS realizar tareas de mantenimiento en un pool de servidores tenemos que teclear los mismos comandos una y otra vez. Afortunadamente con ClusterSSH (cssh) podemos interactuar en varias sesiones SSH a la vez y ejecutar comandos de forma simultánea en un grupo de servidores (cluster).

Básicamente lo que hará esta herramienta tan útil es abrir un xterminal por cada uno de los servidores del clúster y todo lo que escribamos en la consola de administración "central" será replicado a todas ellas. O si eventualmente queremos sólo escribir en un terminal específico sólo tendremos que seleccionarlo y escribir en él. Muy sencillo pero útil.

La mejor manera para acceder por ssh en este escenario es utilizar un par de claves pública/privada sin passphrase de tal manera que no se nos solicite ninguna contraseña durante el acceso. Así que empezamos creándolas:
ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): ./id_rsa
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in ./id_rsa.
Your public key has been saved in ./id_rsa.pub.
The key fingerprint is:
SHA256:ST+bpz1QgvzRCGl3sL25buzfzFMkDieNkt+fMDflpeY root@machine01
The key's randomart image is:
+---[RSA 2048]----+
|                 |
|        .        |
|       +.. . o   |
|      =.=o+ = + .|
|     o OSooO B o |
|      E * ++= o .|
|     . o Boo.  . |
|        o =+.+.  |
|         =+.o.+. |
+----[SHA256]-----+

En mi caso utilizaré varias máquinas (droplets) de DigitalOcean por lo que sólo tenemos que crear una nueva key ssh (pegando el contenido del fichero id_rsa.pub) y luego seleccionar la clave al crear nuevos servidores desde un snapshot.


Ahora, para conectarnos sin introducir contraseña, sólo tenemos que indicar la ruta de la clave privada:

ssh -i id_rsa root@192.168.141.136

O añadirla en el fichero de configuración (normalmente en /etc/ssh/ssh_config):

IdentityFile ~/.ssh/key/id_rsa

ssh root@192.168.141.136

Después instalaremos ClusterSSH en la máquina desde la cuál vamos a controlar el resto:

apt-get install clusterssh

Una vez instalado, si queremos abrir varias sesiones de forma concurrente:

$ cssh -l username server_ip_address_1 server_ip_address_2 server_ip_address_n


O si queremos agrupar IPs en grupos, ClusterSSH puede ser configurado por medio de su fichero de configuración global (/etc/clusters) o, si compartimos el sistema con más gente, mediante el fichero .csshrc en el directorio home correspondiente, y de forma tan simple como poner el nombre del cluster seguido de las IPs que lo conforman:

cluster1 192.168.141.130 192.168.141.131 192.168.141.132 192.168.141.133
cluster2 172.20.1.10 172.20.1.12 172.20.1.14 172.20.1.20

Y ya está, si queremos administrar de forma concurrente todas las máquinas de un determinado clúster sólo tenemos que escribir en la consola:

cssh -l root cluster1

y automáticamente se nos abrirá un terminal por cada una de las IPs definidas.


Si queremos escribir simultáneamente en todas las sesiones debemos hacerlo en el recuadro de la consola de CSSH:


O si queremos escribir en una única sesión sólo tenemos que seleccionarla y listo :)

Comentarios

  1. Ansible rules :)

    ResponderEliminar
  2. He visto artículos de hackplayers mucho mejor explicados. ¿Como hay que crear el archivo para varios cluster? Lo he hecho tal y como se explica pero se me conecta a "cluster1" y se cierra. Con el nivel de este blog seguro que podéis explicar mejor las cosas.

    ResponderEliminar
  3. Hola:
    Es posible compartir sesiones SSH para puertos diferentes en un mismo servidor??.

    Gracias y saludos cordiales

    ResponderEliminar

Publicar un comentario