Anyway, these are the tools I've come across (in no particular order). I'll outline what I regard as the advantages and disadvantages of each below.
- pdsh - "a high-performance, parallel remote shell utility" from Lawrence Livermore National Laboratory
- pssh an implementation of some parallel ssh tools in python
- dsh - dancer's / distributed shell
- pydsh - a python version of dancer's shell
- clusterssh - "a tool for making the same change on multiple servers"
- mussh - "a shell script ... to execute a command or script over ssh on multiple hosts"
- sshpt - "SSH Power Tool (sshpt) enables you to execute commands and upload files to many servers simultaneously via SSH"
- multixterm - part of the expect project
- clusterit - "a collection of clustering tools, to turn your ordinary everyday pile of UNIX workstations into a speedy parallel beast"
- dish - "The diligence shell 'dish' executes commands via ssh/rsh/telnet/mysql simultaneously on several systems"
pdsh from LLNL is first up and aside from the fact that it is a native binary (and hence slightly less flexible than something written in bash or python), pdsh has a wide variety of features including different distribution algorithms, readline support, and cluster resource manager integration (which I really don't need). I wasn't able to get dynamic modules to work under cygwin (to be fair, I didn't give it much effort), but once configured with static modules, pdsh works as advertised.
pssh is a suite tools for using ssh across multiple machines. I give it points for using python and hence running anywhere with a python interpreter. However, it doesn't appear to have an interactive mode, the command to run (or file to be copied or whatever) must be supplied on the command line.
dsh is the original distributed shell tool around. The original C implementation has lead to versions in python and perl. An implementation is included in ClusterIt as well. I didn't bother to compile it mostly due to its dependencies, but it still seems like a good candidate in this realm.
ClusterSSH also looks interesting and like it would meet my needs. A Perl implementation of anything always garners my favor. But, like dvt from ClusterIt, ClusterSSH relys on the X11 protocol for controlling its parallel terminals.
Kudos to the guys who wrote mussh for sticking with bash and only bash. By sticking to shell scripting they've come up with an easy way to get starting running commands across a bunch of machines. However, without some sort of terminal support or repl loop (which simply might not be possible using only bash), my requirement for interactive usage is not met.
ClusterIt actually does much more than I want or need. It contains an entire suite of tools for running programs on a cluster as well as managing the configuration. The dvt (distributed virtual terminal) does in fact look like the kind of thing I want, but with its heavy reliance on X11 for communications between the main terminal and where the commands are executed, I'm writing clusterit off without much further thought.
multixterm is appears to be an expect script that has been around a while. But it doesn't seem to have been included with my expect distribution, and with all these other tools available, I'm not keen on tracking it down.
dish looks promising, it uses tcl (with threads) and expect to control multiple ssh sessions. Unfortunately, cygwin's default tcl build is without threads and my primary use case is to ssh from my laptop to a bunch of machines. You'd be correct to point out I should get a real computer... and trust me, I'm working on it, but for now that is not within my control.
In the end, maybe I should write my own using paramiko and throw another contender on the list.