P u S S H    
n e w s  

pussh_2.0 is out today    06/09/2008 After a 3 year hiatus for the development team, PuSSH 2 is finally out with some important changes, namely target machine acquisition using netcat as opposed to ping, and most importantly of all, the capability to use different ports, because after all SSH could be listening on any port other than 22 and often is these days for machines exposed to the world. Enjoy PuSSH, use it carefully, and send us your feedback.

pussh_1.05 out today    24/06/2005
A support ticket from last week highlighted a lack of support for different SSH protocols. This problem should be resolved in todays release. In future, PuSSH should support any and all SSH client options, but for now, thanks for bringing issues such as this to our attention.

new release out now with cleaned up code - 1.04    14/06/2005
You can now go directly to the official sourceforge project page to download this latest cleaned up PuSSH, rather than to the temporary link posted in the previous update. This is better for the project statistics, and also the right way to do things.

PuSSH works on AIX!    20/01/2005
Realistically speaking, there was never any reason why it shouldn't. As long as Python is installed (in this case python-2.2-4, on AIX5.2), we seem to be in business. In other news, thanks to the testers at iverve.com, it was discovered that the current release on SF is buggy. The core functionality is there, but the '-f <filename>' option, doesn't work, among other possible options. Due to a certain lack of time, a decent testing environment and other unfavorable circumstances, a 'bum version' got released. Before a newer, fully working version is released on SF however, you can get an older, stable version here instead. Remember to change your paths if you need to, to specify the directory you want to run PuSSH from, in the pussh script itself, at lines 88/89, otherwise just dump everything into a /home/yourhomedirectory/pussh directory. Everything else you need to know is in the INSTALL.txt.

PuSSH appears on Python-Eggs.Org    15/06/2004
Fame at last! There's a fair buzz in the Python community about this eggs site. I certainly like it, even if it is just a great collection of links.

first honest impressions, after intensive stress testing    29/10/2003
apart from non-existent targets (as opposed to existing, and receptive targets i.e. those on which sshd is running and which execute the PuSSHed command) causing a slightly heavier load on the source machine than some people might expect if commands are executed in parallel on too many such machines (the results of fairly intensive benchmarking in an environment of hundreds of machines of which 75% to 95% are "valid targets" would suggest a maximum "parallel slice" of 40-50 target machines if you don't want to see a load higher than about 3 on the machine from which the PuSSHed command originates, and we have accounted for this in the latest version - the default parallel slice parameter is a fine-tuned 42, but otherwise you can fairly safely go to about 100, or even beyond, although this obviously depends on what else you have going on), the fact that no serious bug reports have appeared thus far has prompted a development status upgrade to "production/stable", although we are retaining the beta status as well and concurrently, unusual as this may seem (basically, circumstances would indicate PuSSH could technically speaking still fall under either status umbrella by definition, so why not have both?). In other news, DS Libby has officially joined the PuSSH team, as his input has been invaluable not only during most of the development life-cycle thus far, but he will also be implementing some test-scenarios shortly, with a view towards verifying and expanding the flexibility of PuSSH per se in environments where SSH could be configured differently from how it was on the original development platform (CERN PDP clusters, using Kerberos authentication).

next to no bugs in the production environment - alpha turns to beta
Because PuSSH doesn't seem to show any actual bugs as such after initial testing in the CERN production environment, yesterdays alpha release has been upgraded to a beta release (as discussed unofficially). The only significant changes to the package inbetween are the addition of an INSTALL.txt file, and the modification of the path to brussh.py to reflect the installation instructions.

a Python success story is written.    09/09/2003
The first ever alpha release of PuSSH goes global on Sourceforge - as far as anyone can tell, and as basic as the idea may seem at first, at least possibly to a somewhat a more advanced Python developer, this is the first time this kind of application has ever been attempted in Python. At present, "the construct" consists of 2 separate Python modules (one calls the other directly), both of which are now available in a .tgz. It works on most if not all Linux distros for sure, and is probably completely platform independent. On linux/unix, after downloading to your home directory, run tar -zxpf on it, and then simply run it from its own directory thereafter i.e.

[$] ~homedir/pussh/pussh --help

l i n k s .  

python.org - the way forward

openssh.org - the home of what we are wrapping

python-eggs.org - a great compendium of all things Pythonic

freshmeat.net - PuSSH soon to be found here also

cern.ch - where PuSSH was first developed, and "the home of the web"

iverve.com - supporters

d o w n l o a d  

Please proceed to the sourceforge project page.

i n t r o d u c t i o n  
PUSSH is "Pythonic Ubiquitous SSH" - a command line wrapper script for sending commands to multiple machines in parallel, i.e. in *real time*, with options for controlling the degree of parallelism, timeouts, and node selections. At present, PuSSH is composed of two Python modules, one of which is called explicitly by the other, but this "construct" may change in future versions. PuSSH was designed for usage on networks / clusters / machine farms with lots, or multiple hosts (or indeed over the entire internet, for that matter), ideally wherein SSH is configured with Kerberos / RSA/DSA keys or SSH-Agent in such a way as to avoid any password authentication. Using PUSSH, you can send the same command via SSH to a range of machines of practically any size, and IN PARALLEL - if the abovementioned conditions for SSH password authentication are met. If not, then some nifty capabilities are also on offer for purely sequential command execution on your target machines.

PUSSH Usage:

pussh [-h] [-s] [-r] [-f <filename>] [-p <parallel>] [-l <userid>] [-t <timeout value in seconds>] <target> <commands>

-h print this helpful message

-s execute a command over a range of machines in SEQUENCE (PARALLEL execution is the default).

The above option can be useful when a password is necessary on one or more machines in the target range for any reason.

-p parallel - numeric argument is equal to number of machines on which command should execute in parallel.

-l <user> send command as user <user>

-r send command as root

-t <timeout value in seconds> time after which a command times out for any particular reason

-f <filename> file contains list of target-hosts, each on one row of the file.

-P <ssh port number> ... default is the traditional 22 if not specified

--prefix prefix each line of output with 'hostname:'
(note: this option may have slight bugs - please feel free to report them).

<target(s)> target machine(s) in the following possible formats:

machine - single target

machine[01-10] - range delimited by numeric(-numeric) suffixes in square brackets

machine[01,05,10] - range delimited by numeric(,numeric) suffixes separated by commas

machine[01-05,07,09-10] - any combination or permutation of the above 2


Example 1: pussh -r machine[01-10,12,15-20] uptime

Example 2: pussh machine[01-10,12,15-20] "uname -a; uptime"

Example 3: pussh -t 10 -f hostlist -r "uname -a; uptime; ls -l | grep stuff"

t h o u g h t s . . .  
PuSSH is also:
  • a FREE Software OpenSource Production under GPL, written in Python on Linux, and fundamentally a wrapper for SSH.
  • more than anything else, a testament to the power of Python.


  • interesting idea: although the functionality of PuSSH is - conceptually and practically speaking - entirely dependent on SSH, the relatively basic Python scripting construct within PuSSH could be easily adapted into a high performance port scanning utility.
S u p p o r t i n g O p e n S o u r c e  
SourceForge.net Logo
f e e d b a c k .  

Your feedback is not only welcome, but also encouraged. For support, questions, suggestions, commercial inquiries or offers of lucrative work in the computer industry, please contact:


© PuSSH Team - MMIII