dsh – distributed shell

DSH is Distributed Shell. It allows you to run shell commands on multiple servers at once and gather see their output in local terminal.

Install

Install  On Debian/Ubuntu

apt-get install dsh

Mac

brew install dsh

Config

You can use default config but we always add following to dsh config file:

Global config => /etc/dsh.conf

Local config =>  ~/.dsh/dsh.conf

remoteshell = ssh
showmachinenames = 1

Hostname List

Edit/create

Global list => /etc/dsh/machines.list

ADVERTISEMENT

Local list =>  ~/.dsh/dsh/machines.list

Add hostnames, one on each line.

Please note that, you need to add SSH key’s separately (beforehand).

example.com
example.net

Usage

We need to pass actual command to dsh command with optional prameters:

Lets check uptime

 dsh -a uptime

You will see output as below

example.com: 18:07:18 up 294 days,  6:38,  3 users,  load average: 0.17, 0.26, 0.24
example.net: 18:09:47 up 9 days, 19:54,  1 user,  load average: 0.26, 0.2

-a denotes run for all hosts.

ADVERTISEMENT

We can also pass -c which will create concurrent connections to all servers.

Grouping Hosts/Servers

You can make group and run dsh command on that group servers only.

You can add a file under group directory like below

Global settings => /etc/dsh/group/hello

Local settings =>  ~/.dsh/dsh/group/hello

Add list of hostnames. You can add multiple hostnames to groups

hello.com
hello.net
hello.org

Lets check uptime on hello group servers:

dsh -g hello uptime

Will display something like

hello.com: 18:11:45 up 9 days, 19:56,  0 users,  load average: 0.05, 0.18, 0.22
hello.net: 18:11:45 up 19 days, 19:56,  0 users,  load average: 0.15, 0.18, 0.22
hello.org: 18:11:45 up 119 days, 19:56,  0 users,  load average: 0.15, 1.8, 0.22

Web-Based Alternative

If you are looking for web-based service which does things like this, you may try https://commando.io/.  It has some really nice features and a free plan for 2 users.