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.
Table of Contents
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:
- Subscribe to our Email Newsletter : Sign Up Now
- Support OSTechNix : Donate Via PayPal
- Download free E-Books and Videos : OSTechNix on TradePub
- Connect with us: Reddit | Facebook | Twitter | LinkedIn | RSS feeds
Have a Good day!!