PSSH : Parallel SSH to execute commands on a number of hosts

About PSSH

If we are managing a large number of servers , there are times when we need to execute the same command on all the servers. Sometimes need to copy a file to multiple hosts.  For these tasks we can login to each of the servers and execute the command or write a script to automatize the task. Logging  to each of the servers and executing a  command will take a long time and writing a script to automize the task will need a initial effort. In such cases , tools like pssh , pconsole , Clusterssh comes handy. In this post , we will see how to use pssh.

The pssh manual page says "pssh  is  a  program  for executing ssh in parallel on a number of hosts.  It provides features such as sending input to all of the processes, passing a password to ssh, saving output to files, and timing out.


Installing PSSH

Pssh is written using python. The installation steps are somewhat different from the traditional method of using the make the 'make' tool to compile a program and then install it. The steps are as follows:

1. Download pssh :

    wget http://code.google.com/p/parallel-ssh/downloads/detail?name=pssh- 2.3.1.tar.gz

2. Installing pssh

     1. 
             $tar zxvf pssh-2.3.1.tar.gz
             $cd pssh-2.3.1
   
     2.  If we don't  have setuptools installed , get it downloaded from Internet.

            $ wget 'http://peak.telecommunity.com/dist/ez_setup.py'
            $ sudo python ez_setup.py

For the above two steps , if there is no Internet access , then we need to download the following two programs from a machine having internet access and copy it to the installing machine under pssh-2.3.1 directory.

            $ wget 'http://peak.telecommunity.com/dist/ez_setup.py'
            $ wget 'http://pypi.python.org/packages/2.4/s/setuptools/setuptools-0.6c11-py2.4.egg'
            $ cp ez_setup.py  pssh-2.3.1/
            $ cp setuptools-0.6c11-py2.4.egg pssh-2.3.1/

Then execute the following command.
            $ sudo python ez_setup.py 

Following is the output of the above command.

          $ sudo python ez_setup.py 
Processing setuptools-0.6c11-py2.4.egg
creating /usr/lib/python2.4/site-packages/setuptools-0.6c11-py2.4.egg
Extracting setuptools-0.6c11-py2.4.egg to /usr/lib/python2.4/site-packages
Adding setuptools 0.6c11 to easy-install.pth file
Installing easy_install script to /usr/bin
Installing easy_install-2.4 script to /usr/bin

Installed /usr/lib/python2.4/site-packages/setuptools-0.6c11-py2.4.egg
Processing dependencies for setuptools==0.6c11
Finished processing dependencies for setuptools==0.6c11


3. If all goes fine , we will execute the below command. 
           $ sudo python setup.py install

 With this , we are done installing 'pssh' .

Using PSSH

  Usage: pssh [OPTIONS] command [...]

  Important options are:

          -h host_file :
                  Read hosts from the given host_file. 
          -H host string :
                   Adding hostnames on the commandline
          -l user :
                  Login to hosts using that user
          -o outdir :
                 Save  standard output to files in the given directory. 
          -A :
              Prompt  for  a  password  and pass it to ssh.
          -i  :
              Display standard output and standard error as each
              host completes.
          -O : SSH options in the format used in the SSH configu-
                 ration  file
Examples

1.  Supplying hostnames in commandline

$ pssh -A -i -H "node1.example.com node3.example.com"  "-O StrictHostKeyChecking=no"   -l ssdg uptime

Warning: do not enter your password if anyone else has superuser
privileges or access to your account.
Password:
[1] 06:22:58 [SUCCESS] node1.example.com
 06:22:58 up  3:45,  0 users,  load average: 1.07, 1.06, 1.04
[2] 06:22:58 [SUCCESS] node3.example.com
 06:22:58 up  6:02,  0 users,  load average: 2.60, 2.55, 2.54


The -A option will prompt for the password
       -i option will display output and error on standard output
      -O StrictHostKeyChecking=no : SSH option not to perform Strict  
                                                         HostKeyChecking

2. Supplying hostnames in a file rather than reading from commandline

   $cat nodes.txt
   node1.example.com
   node3.example.com

$ pssh -h nodes.txt -A -l root -o /tmp/foo uptime
Warning: do not enter your password if anyone else has superuser
privileges or access to your account.
Password:
[1] 06:15:48 [SUCCESS] node1.example.com
[2] 06:15:48 [SUCCESS] node3.example.com

[root@masternode ~]# cat /tmp/foo/node
node1.example.com  node3.example.com 
 
[root@masternode ~]# cat /tmp/foo/node1.example.com
 06:15:48 up  3:38,  0 users,  load average: 1.00, 1.03, 1.04
[root@masternode ~]# cat /tmp/foo/node3.example.com
 06:15:48 up  5:55,  0 users,  load average: 2.75, 2.59, 2.55
[root@masternode ~]#

Example 3:

Comments

pawan giri said…
hi Zaman,

i foolow the steps given by you but its not working for me.

kindly help me out in this. PFB the error.

[root@hdpserver ~]# pssh -v -t 0 -l root -H "hdpserver" "-O StrictHostKeyChecking=no" 'df -h'
[1] 17:41:39 [FAILURE] hdpserver Exited wit

Popular posts from this blog

How to add check_http as a service in Nagios Monitoring using NRPE

Configuring Nagios to monitor services using NRPE