×

DSH (Dancer’s Shell) – Run Commands on Multiple Linux Hosts

DSH (Dancer’s Shell) – Run Commands on Multiple Linux Hosts


Systems Administrators are well aware of the importance of being able to monitor and administer numerous machines in a short amount of time, preferably with minimal physical movement. Whether it’s a small cloud environment or a large server cluster, the ability to centrally manage computers is essential.

To partly accomplish this, I am going to show you how to use a nifty little tool called DSH (dancer’s shell/distributed shell) that allows a user to run commands across multiple machines.

What is DSH?

DSH is short for ‘Distributed Shell‘ or ‘Dancer’s Shell‘, which is a freely available tool on most major distributions of Linux but can be easily built from a source if your distribution does not include it in its package repository.

Install DSH (Distributed Shell) in Linux

We are going to assume a Debian / Ubuntu environment for the scope of this tutorial. If you are using another distribution, please substitute the appropriate commands for your package manager.

On Debian-based distributions, you can install DSH using the following apt command in the terminal.

sudo apt install dsh

On RHEL-based distributions, you need to compile it from source tar balls, but before doing so, make sure to compile and install the ‘libdshconfig‘ library.

wget http://www.netfort.gr.jp/~dancer/software/downloads/libdshconfig-0.20.10.cvs.1.tar.gz
tar xfz libdshconfig*.tar.gz 
cd libdshconfig-*
./configure ; make
sudo make install

Then compile dsh and install.

wget https://www.netfort.gr.jp/~dancer/software/downloads/dsh-0.22.0.tar.gz
tar xfz dsh-0.22.0.tar.gz
cd dsh-*
./configure ; make 
sudo make install

How to Use DSH in Linux

The main configuration file “/etc/dsh/dsh.conf” (For Debian) and “/usr/local/etc/dsh.conf” (for Red Hat) is pretty straightforward, but since rsh is an unencrypted protocol, we are going to use SSH as the remote shell.

Using the text editor of your choice, find this line:

remoteshell =rsh

and change it to:

remoteshell =ssh

There are other options you can pass in here if you choose, and there are plenty of them to find on the dsh man page. For now, we are going to accept the defaults and have a look at the next file, /etc/dsh/machines.list (for Debian).

For Red Hat-based systems you need to create a file called “machines.list” in the “/usr/local/etc/” directory.

The syntax here is pretty easy. All you have to do is enter in a machine’s credentials (Hostname, IP Address, or FQDN) one per line.

Note: When accessing more than one machine simultaneously, it would behoove you to set up key-based password-less SSH on all of your machines. Not only does this provide ease of access, but security-wise, it hardens your machine as well.

My “/etc/dsh/machines.list” or “/usr/local/etc/machines.list” file says:

172.16.25.125
172.16.25.126

Once you have entered the credentials of the machines you wish to access, let’s run a simple command like uptime to all of the machines.

dsh -aM -c uptime

Sample Output:

172.16.25.125: 05:11:58 up 40 days, 51 min, 0 users, load average: 0.00, 0.01, 0.05
172.16.25.126: 05:11:47 up 13 days, 38 min, 0 users, load average: 0.00, 0.01, 0.05

So, What Does the ‘dsh’ Command Do?

Pretty simple. First, we ran dsh and passed the “-a” option to it, which says to send the “uptime” command to “ALL” of the machines listed in “/etc/dsh/machines.list“.

Next, we specified the “-M” option, which says to return the “machine name” (specified in “/etc/dsh/machines.list“) along with the output of the uptime command. (Very useful for sorting when running a command on a number of machines).

The “-c” option stands for “command to be executed” in this case, “uptime“.

DSH can also be configured with groups of machines in the “/etc/dsh/groups/” file, where is a file with a list of machines in the same format as the “/etc/dsh/machines.list” file. When running dsh on a group, specify the groupname after the “-g” option.

For Red Hat-based systems you need to create a folder called “groups” in the “/usr/local/etc/” directory. In that “groups” directory you create a file called “cluster“.

For example, run the “w” command on all machines listed in the “cluster” group file “/etc/dsh/groups/cluster” or “/usr/local/etc/groups/cluster“.

dsh -M -g cluster -c w

DSH provides much more flexibility, and this tutorial only scratches the surface. Aside from executing commands, DSH can be used to transfer files, install software, add routes, and much more.

To a Systems Administrator tasked with the responsibility of a large network, it is invaluable.



Source link