Skip to main content

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 PSSHin 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 Cprogramming 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

Comments

Popular posts from this blog

4 Ways to Communicate Across Browser Tabs in Realtime

1. Local Storage Events You might have already used LocalStorage, which is accessible across Tabs within the same application origin. But do you know that it also supports events? You can use this feature to communicate across Browser Tabs, where other Tabs will receive the event once the storage is updated. For example, let’s say in one Tab, we execute the following JavaScript code. window.localStorage.setItem("loggedIn", "true"); The other Tabs which listen to the event will receive it, as shown below. window.addEventListener('storage', (event) => { if (event.storageArea != localStorage) return; if (event.key === 'loggedIn') { // Do something with event.newValue } }); 2. Broadcast Channel API The Broadcast Channel API allows communication between Tabs, Windows, Frames, Iframes, and  Web Workers . One Tab can create and post to a channel as follows. const channel = new BroadcastChannel('app-data'); channel.postMessage(data); And oth...

Certbot SSL configuration in ubuntu

  Introduction Let’s Encrypt is a Certificate Authority (CA) that provides an easy way to obtain and install free  TLS/SSL certificates , thereby enabling encrypted HTTPS on web servers. It simplifies the process by providing a software client, Certbot, that attempts to automate most (if not all) of the required steps. Currently, the entire process of obtaining and installing a certificate is fully automated on both Apache and Nginx. In this tutorial, you will use Certbot to obtain a free SSL certificate for Apache on Ubuntu 18.04 and set up your certificate to renew automatically. This tutorial will use a separate Apache virtual host file instead of the default configuration file.  We recommend  creating new Apache virtual host files for each domain because it helps to avoid common mistakes and maintains the default files as a fallback configuration. Prerequisites To follow this tutorial, you will need: One Ubuntu 18.04 server set up by following this  initial ...

Working with Node.js streams

  Introduction Streams are one of the major features that most Node.js applications rely on, especially when handling HTTP requests, reading/writing files, and making socket communications. Streams are very predictable since we can always expect data, error, and end events when using streams. This article will teach Node developers how to use streams to efficiently handle large amounts of data. This is a typical real-world challenge faced by Node developers when they have to deal with a large data source, and it may not be feasible to process this data all at once. This article will cover the following topics: Types of streams When to adopt Node.js streams Batching Composing streams in Node.js Transforming data with transform streams Piping streams Error handling Node.js streams Types of streams The following are four main types of streams in Node.js: Readable streams: The readable stream is responsible for reading data from a source file Writable streams: The writable stream is re...