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.
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/
$ 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
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
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 ~]#
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
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
how can i do with pssh ? do you have any suggestion? and how can i copy files from my clients computers to my computers through the pscp