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

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

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.

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

Install DSH

On Arch Linux and derivatives:

DSH is available in AUR, so you can install it using AUR helpers such as Yaourt or Packer as shown below.

yaourt -S dsh


packer -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


# 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.

On DEB based systems:

$ sudo vi /etc/dsh/machines.list

On RPM based systems:

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

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


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:


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

And, that’s all for now folks. Hope this helps. If you find our guides useful, please take a moment to share them on your social and professional networks. We will be posting more useful guides in the days to come. Keep visiting!



Thanks for stopping by!

Help us to help you:

Have a Good day!!

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *

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