dsh: Dancer’s Shell / Distributed Shell | Algo de Linux

miércoles, 14 de marzo de 2012

dsh: Dancer’s Shell / Distributed Shell

dsh es una herramienta muy interesante, que conocí gracias a Alfonso Pastor. Esta herramienta sirve para ejecutar comandos de forma remota en un conjunto de máquinas.

Instalarla es muy sencillo puesto que se encuentra en los repositorios de Debian:

# apt-get install dsh

En cuanto a la configuración de dsh, en Debian, se guarda en un conjunto de archivos que se encuentran dentro del directorio /etc/dsh:

recursos:/root# tree /etc/dsh
/etc/dsh
├── dsh.conf
├── group
│   └── all -> ../machines.list
└── machines.list 


Además, también puede guardarse la misma información en el home del usuario, dentro del directorio $HOME/.dsh
  • El fichero dsh.conf contiene la configuración de dsh.
  • El fichero machines.list contiene una lista de todas las máquinas sobre las que el comando actuará cuando especifiquemos la opción -a (una por línea).
  • El directorio group contiene un enlace llamado all que apunta al fichero machines.list. Además, dentro de este directorio podremos crear grupos de máquinas en diferentes ficheros que contendrán una por línea, a los que podremos referirnos si utilizamos el comando con el parámetro --group.
  • También podremos especificar una máquina en concreto o un fichero cualquiera que contenga una lista de máquinas.
En los ficheros de listas de máquinas podemos especificar la ip de cada máquina o el nombre de la máquina, si tenemos un servidor dns.

A la hora de ejecutar comandos, podremos elegir qué shell queremos usar: rsh", "remsh" o "ssh".


Además, podremos elegir si queremos que se ejecute un comando shell en cada máquina y que se espere a que la ejecución finalice antes de pasar a la siguiente máquina, mediante la opción: --wait-shell | -w

O, podemos hacer que la ejecución en diferentes máquinas se ejcute de forma concurrente mediante la opción: --concurrent-shell | -c

Por supuesto, para mayor comodidad a la hora de usar dsh, lo mejor que podemos hacer es transferir la clave pública de la máquina desde la que ejecutamos dsh a las máquinas en las que ejecutaremos los comandos. De este modo, no se nos pedirá la clave cada vez que se ejecute un comando en cada máquina.

Veamos algunos ejemplos de uso:

Imaginemos que tenemos un fichero machines.list dentro del directorio /etc/dsh que contiene la lista de todas nuestras máquinas y queremos conocer el kernel que está ejecutando cada una. Escribiríamos el siguiente comando:

# dsh -a uname -r

Si tan sólo quisiéramos averiguar el kernel de la máquina con la IP 192.168.0.128:

# dsh -m 192.168.0.128 uname -r

Y si quisiéramos averiguar el kernel de un grupo de máquinas llamado servidores en el que se encuentra la lista de nuestros servidores, ejecutaríamos:

# dsh -g servidores uname -r

El fichero servidores lo guardaríamos en /etc/dsh/group/

Si queremos que la ejecución se realice de forma concurrente, podemos especificar:

# dsh -c -g servidores uname -r

Y si queremos que la ejecución se realice en serie de forma que la ejecución en una máquina no comience hasta que no haya terminado la anterior:

# dsh -w -g servidores uname -r

Si queremos ver la lista de usuarios logueados en todos los equipos:

# dsh -a w

Cuando ejecutamos dsh, en la información de pantalla no muestra el nombre de la máquina donde está corriendo el comando en ese momento. Si queréis que se muestre, tendréis que añadir el parámetro:  -M
Por ejemplo:

# dsh -aM w

Si echamos un vistazo al fichero de configuración de dsh (/etc/dsh/dsh.conf), veremos que, por defecto, dsh usa rsh en lugar de ssh:

remoteshell = rsh
 
Si queremos cambiarlo, no tenemos más que modificar la línea anterior por:

remoteshell = ssh

1 comentario:

cioran l dijo...

saludos, interesante hoy di con su blog, buenos contenidos, seguire la pista por newsbeutter