n e w s
pussh_2.0 is out today
After a 3 year hiatus for the development team, PuSSH 2 is finally out with some important
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
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
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!
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
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
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.
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
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 [-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
-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
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
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
- more than anything else, a testament to the power of
- 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
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: