Control your cluster with csshx

For the past few months, I've been working a lot with clustered VMs (wink wink ;)). Over and over again, I would run into this scenario:

  • For each node in the cluster:
    • SSH into node 1
    • Fire vim and update a file
    • Restart services and test changes

This cycle gets old pretty quickly. I was chatting about this problem over lunch, when one of my coworkers introduced me to the most excellent CSSHX

CSSHX is a perl-based cluster SSH tool for Mac OSX. It's very straightforward to use, you just call, passing the user@IP:PORT of each server in your cluster:

csshx admin@server1 admin@server2 admin@server3

With that command, CSSHX will open 3 terminals (one per server), and a master terminal. Anything you type in the master terminal will be automatically typed on all the other terminals. Simple, and effective.

If you have a series of clusters you interact with a lot, CSSHX also supports using a configuration file (it defaults to /etc/cluster). Every line of the file has to follow this format 'name user@IP:PORT user@IP:PORT user@IP:PORT...'. You can have as many lines as you want.

If your /etc/cluster looks like this:

dev admin@server1 admin@server2 admin@server3
dogfood admin@server10 admin@server20 admin@server30

You could control the dogfood cluster like this:

csshx dogfood

One drawback I've found is that, when connecting to new servers, the 'clustered terminals' fail to connect when SSH prompts to accept a new server ssh key. As a workaround, I connect to each server directly once, accept the host key, and then use CSSHX for any future connections.

Hope it helps!