Home Command line utilities DSH – Run A Linux Command On Multiple Hosts At A Time

DSH – Run A Linux Command On Multiple Hosts At A Time

By sk
Published: Last Updated on 2.5K views

A while ago, we have written a guide that described how to run a single command on multiple remote systems at once using PSSH in Unix-like systems. Today, we are going to discuss about a similar tool called DSH. It stands for Distributed shell (or dancer’s shell). Using DSH, we can run a linux command on multiple hosts at a time. It is free and open source utility written using C programming language.

Install DSH

On Arch Linux and derivatives:

DSH is available in AUR, so you can install it using AUR helpers, for example Yay, as shown below.

$ yay -S dsh

On Debian, Ubuntu:

DSH is available in the official repositories of Debian, Ubuntu and other DEB based systems such as Linux Mint, Elementary OS. To install it DSH in any DEB based system, run:

$ sudo apt-get install dsh

For other Linux distributions, DSH can be manually compiled and installed as described below.

DSH requires libdshconfig in order to work. You can download the latest version of libdshconfig and dsh from this link.

Once downloaded, go to the directory where you have downloaded both both packages.

First compile and install libdshconfig using commands:

$ tar xfz libdshconfig*.tar.gz
$ cd libdshconfig-*
$ ./configure ; make
$ sudo make install

Then, compile and install dsh as well.

$ tar xfz dsh*.tar.gz
$ cd dsh-*
$ ./configure ; make
$ sudo make install

Configure DSH

We have installed dsh. Let us now configure DSH to execute commands over multiple hosts. To do so, first edit DSH configuration file and set the remote shell value from rsh to ssh.

On Arch Linux and derivatives, the default configuration file is /etc/kgname/dsh.conf.

Edit this file:

$ sudo vi /etc/kgname/dsh.conf

Change remoteshell value from rsh to ssh.

#default configuration file for dsh.
 # suppled as part of dancer's shell

verbose = 0

remoteshell =ssh
 showmachinenames = 0
waitshell=1 # whether to wait for execution

#remoteshellopt=...

# default config file end.

On DEB based systems:

$ sudo vi /etc/dsh/dsh.conf

remoteshell =ssh

On RPM based systems:

$ sudo vi /usr/local/etc/dsh.conf

remoteshell =ssh

Next, we need to add the remote hosts where we want to execute the commands.

To do so, create/edit the machines.list file and add the remote hosts.

On Arch Linux and derivatives:

$ sudo vi /etc/kgname/machines.list

Add the remote host's IP or Hostname one by one as shown below.

192.168.43.100 
192.168.43.101

On DEB based systems:

$ sudo vi /etc/dsh/machines.list
192.168.43.100 
192.168.43.101

On RPM based systems:

$ sudo vi /usr/local/etc/machines.list
192.168.43.100
192.168.43.101

You can add any number of remote hosts in the machines.list file.

Run A Linux Command On Multiple Hosts At A Time Using DSH

Once you have added all remote hosts and created a common user on all your remote systems, you can execute the Linux command on all remote hosts at once. Say for example, the following command will execute the uname -r command on all remote hosts at once.

$ dsh -a -c uname -r

It will ask you to enter the username and password of the respective remote host. If you don't want to enter the user credentials each time you run this command, just configure password-less SSH login.

Sample output:

3.10.0-514.16.1.el7.x86_64
4.4.0-34-generic

As you see in the above output, dsh utility displays the Kernel version of my two remote hosts.

For more details, refer the man page.

$ man dsh

Suggested read:


Resource:

Thanks for stopping by!

Help us to help you:

Have a Good day!!

You May Also Like

Leave a Comment

* By using this form you agree with the storage and handling of your data by this website.

This site uses Akismet to reduce spam. Learn how your comment data is processed.

This website uses cookies to improve your experience. By using this site, we will assume that you're OK with it. Accept Read More