# sshall

### A simple but flexible tool for executing remote commands across multiple hosts

There are many excellent tools available for automating administrative tasks across many hosts.  However, these tools are usually quite sophisticated and require significant commitment and initial configuration overhead.  All I really wanted was a tool that would allow me to push command, using ssh, to large groups of hosts, often in parallel.  Also, I usually generated the list hosts I needed to work with using a pipeline of commands in bash.  These needs and insights led me to develop a tool that I call sshall that is designed to take a list of hosts from stdin and execute arbitrary commands across these hosts, optionally in parallel.  For example, consider the following usage:

\$ echo bacon eggs waffles toast | sshall uptime

bacon
-------
23:43:40 up 14 days,  5:05,  1 user,  load average: 1.19, 1.17, 1.15

eggs
-------
23:40:23 up 14 days,  5:04,  4 users,  load average: 1.04, 1.00, 1.00

waffles
-------
23:40:37 up 14 days,  5:08,  2 users,  load average: 1.38, 1.47, 1.51

toast
-------
23:40:38 up 14 days,  5:08,  1 user,  load average: 0.10, 0.35, 0.69


From here, it is easy to imagine cases where you could use grep, awk, sed and so on build up the list of hosts you need to work with at any given time.

The initial version of sshall was written in bash but I soon began to want features that were more easily achieved in C.  The current C version of sshall is a work in progress but supports much of the functionality I am looking for, including:

• sequential command execution
• parallel command execution (in small batches or all at once)
• color output, e.g., to denote a failure exit status
• input from stdin or file