Thursday, July 20, 2017

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.

nstall 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
Or,
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

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

Usage

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
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!
Cheers!
Resource:

No comments: