No doubt, that OpenSSH is one of the most widely used and powerful tool available for Linux, that allows you to connect securely to remote Linux systems via a shell and allows you to transfer files securely to and from remote systems.

But the biggest disadvantages of OpenSSH is that, you cannot execute same command on multiple hosts at one go and OpenSSH is not developed to perform such tasks. This is where Parallel SSH or PSSH tool comes in handy, is a python based application, which allows you to execute commands on multiple hosts in parallel at the same time.
Don’t Miss: Execute Commands on Multiple Linux Servers Using DSH Tool
PSSH tool includes parallel versions of OpenSSH and related tools such as:
- pssh – is a program for running ssh in parallel on a multiple remote hosts.
- pscp – is a program for copying files in parallel to a number of hosts.
- prsync – is a program for efficiently copying files to multiple hosts in parallel.
- pnuke – kills processes on multiple remote hosts in parallel.
- pslurp – copies files from multiple remote hosts to a central host in parallel.
These tools are good for System Administrators who find themselves working with large collections of nodes on a network.
Install PSSH or Parallel SSH on Linux
In this guide, we shall look at steps to install the latest version of PSSH (i.e. version 2.3.1) program on Fedora based distributions such as CentOS/RedHat and Debian derivatives such as Ubuntu/Mint using pip command.
The pip command is a small program (replacement of easy_install script) for installing and managing Python software packages index.
On Fedora based Distributions
On CentOS/RHEL distributions, you need to first install pip (i.e. python-pip) package under your system, in order to install PSSH program.
# yum install python-pip
On Fedora 21+, you need to run dnf command instead yum (dnf replaced yum).
# dnf install python-pip
Once you’ve install pip tool, you can install the pssh package with the help of pip command as shown.
# pip install pssh
Sample Output
/usr/lib/python2.6/site-packages/pip/_vendor/requests/packages/urllib3/util/ssl_.py:90: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning. InsecurePlatformWarning You are using pip version 7.1.0, however version 7.1.2 is available. You should consider upgrading via the 'pip install --upgrade pip' command. Collecting pssh /usr/lib/python2.6/site-packages/pip/_vendor/requests/packages/urllib3/util/ssl_.py:90: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning. InsecurePlatformWarning Downloading pssh-2.3.1.tar.gz Installing collected packages: pssh Running setup.py install for pssh Successfully installed pssh-2.3.1
On Debian Derivatives
On Debian based distributions it takes a minute to install pssh using pip command.
$ sudo apt-get install python-pip $ sudo pip install pssh
Sample Output
Downloading/unpacking pssh Downloading pssh-2.3.1.tar.gz Running setup.py (path:/tmp/pip_build_root/pssh/setup.py) egg_info for package pssh Installing collected packages: pssh Running setup.py install for pssh changing mode of build/scripts-2.7/pssh from 644 to 755 changing mode of build/scripts-2.7/pnuke from 644 to 755 changing mode of build/scripts-2.7/prsync from 644 to 755 changing mode of build/scripts-2.7/pslurp from 644 to 755 changing mode of build/scripts-2.7/pscp from 644 to 755 changing mode of build/scripts-2.7/pssh-askpass from 644 to 755 changing mode of /usr/local/bin/pscp to 755 changing mode of /usr/local/bin/pssh-askpass to 755 changing mode of /usr/local/bin/pssh to 755 changing mode of /usr/local/bin/prsync to 755 changing mode of /usr/local/bin/pnuke to 755 changing mode of /usr/local/bin/pslurp to 755 Successfully installed pssh Cleaning up...
As you can see from the output above, the latest version of pssh is already installed on the system.
How do I Use pssh?
When using pssh you need to create a host file with the number of hosts along with IP address and port number that you need to connect to remote systems using pssh.
The lines in the host file are in the following form and can also include blank lines and comments.
192.168.0.10:22 192.168.0.11:22
Executing single command on multiple server using pssh
You can execute any single command on different or multiple Linux hosts on a network by running a pssh command. There are many options to use with pssh as described below:
We shall look at a few ways of executing commands on a number of hosts using pssh with different options.
- To read hosts file, include the -h host_file-name or –hosts host_file_name option.
- To include a default username on all hosts that do not define a specific user, use the -l username or –user username option.
- You can also display standard output and standard error as each host completes. By using the -i or –inline option.
- You may wish to make connections time out after the given number of seconds by including the -t number_of_seconds option.
- To save standard output to a given directory, you can use the -o /directory/path option.
- To ask for a password and send to ssh, use the -A option.
Let’s see few examples and usage of pssh commands:
1. To execute echo “Hello TecMint” on the terminal of the multiple Linux hosts by root user and prompt for the root user’s password, run this command below.
Important: Remember all the hosts must be included in the host file.
# pssh -h pssh-hosts -l root -A echo "Hello TecMint" Warning: do not enter your password if anyone else has superuser privileges or access to your account. Password: [1] 15:54:55 [SUCCESS] 192.168.0.10:22 [2] 15:54:56 [SUCCESS] 192.168.0.11:22
Note: In the above command “pssh-hosts” is a file with list of remote Linux servers IP address and SSH port number that you wish to execute commands.
2. To find out the disk space usage on multiple Linux servers on your network, you can run a single command as follows.
# pssh -h pssh-hosts -l root -A -i "df -hT" Warning: do not enter your password if anyone else has superuser privileges or access to your account. Password: [1] 16:04:18 [SUCCESS] 192.168.0.10:22 Filesystem Type Size Used Avail Use% Mounted on /dev/sda3 ext4 38G 4.3G 32G 12% / tmpfs tmpfs 499M 0 499M 0% /dev/shm /dev/sda1 ext4 190M 25M 156M 14% /boot [2] 16:04:18 [SUCCESS] 192.168.0.11:22 Filesystem Type Size Used Avail Use% Mounted on /dev/mapper/centos-root xfs 30G 9.8G 20G 34% / devtmpfs devtmpfs 488M 0 488M 0% /dev tmpfs tmpfs 497M 148K 497M 1% /dev/shm tmpfs tmpfs 497M 7.0M 490M 2% /run tmpfs tmpfs 497M 0 497M 0% /sys/fs/cgroup /dev/sda1 xfs 497M 166M 332M 34% /boot
3. If you wish to know the uptime of multiple Linux servers at one go, then you can run the following command.
# pssh -h pssh-hosts -l root -A -i "uptime" Warning: do not enter your password if anyone else has superuser privileges or access to your account. Password: [1] 16:09:03 [SUCCESS] 192.168.0.10:22 16:09:01 up 1:00, 2 users, load average: 0.07, 0.02, 0.00 [2] 16:09:03 [SUCCESS] 192.168.0.11:22 06:39:03 up 1:00, 2 users, load average: 0.00, 0.06, 0.09
You can view the manual entry page for the pssh command to get many other options to find out more ways of using pssh.
# pssh --help

Summary
Parallel SSH or PSSH is a good tool to use for executing commands in an environment where a System Administrator has to work with many servers on a network. It will make it easy for commands to be executed remotely on different hosts on a network.
Hope you find this guide useful and incase of any additional information about pssh or errors while installing or using it, feel free to post a comment.
In CentOS 7 PSSH is available from the epel repo. All you have to do is
yum install epel-release
thenyum install pssh
. That’s it!Anyway thanks for the article.
@Ravi
Thanks for notifying us about this, we’ll check it out.
this is awesome thanks for the tutorial makes updating vpn network so easy :)
@Mike
Welcome, thanks for the feedback. You may consider sharing this guide with other Linux users out there.
I see there is a
" -l "
option to pass userid. How do I pass password of the host pro-grammatically. That is, the password must be sent from a script based on password entered in some web page.@GA
Check out the -A or – -askpass flag, it is used to prompt for a password and pass it to ssh.
I want to run multiple commands on servers instead of single command or is there any way that pssh read commands from a file one by one and print the output on terminal ?
@Jk
Yes, you specify the commands in a shell script, eg. commands.sh and make it executable. Then use the -I flag to run commands from it, like this:
#pssh -h hosts.txt -l ec2-user -P -I<./commands.sh
The flag:
-h – specifies host file
-l – specifies username
-P – displays output as it arrives.
-I – reads and sends commands from a script to ssh processes
Try this out, thanks.
Good morning, is it possible to execute a command on different server using root user but every server has got a different root password and I don’t want install a key on every servers? If I use the following command:
the command ask to me the password, I enter the password of the first server, the command work for that server but failed on the others, I suppose pssh use the same password I insert for every server.
Thank you in advance for any help. Regards
@Marco
That would be complicated, i suppose the easiest way to use Pssh is to install a key on every servers. I can not certainly tell if you can use it with different root passwords on the different servers.
Anyone knows the difference between pssh and mpssh?
@Jose,
PSSH is for execute commands on multiple servers in parallel at the same time.
MPSSH – Mass Parallel Secure Shell executes multiple parallel ssh binary instances on a list of hosts.
I am try the following command
And I am receiving this error message , any idea ?
And no password was changed.
Stderr:
—————————————————————–
This network/computer system is for the use of authorized
users only. Users (authorized or unauthorized) should have
no explicit or implicit expectations of privacy. Individuals
using this network/computer system without authority, or in
excess of their authority, are subject to having all of their
activities on this network/computer system monitored, recorded,
and disclosed by system personnel. In the course of monitoring
individuals improperly using this network/computer system, or
in the course of system operation or maintenance or for the
purpose of protecting the rights or property of the system
provider, the activities of authorized users maybe monitored,
recorded, and disclosed. Anyone using this network/computer
system expressly consents to such monitoring, recording, and
disclosure and is advised that if such monitoring reveals
possible evidence of criminal activity, system personnel may
provide the resulting evidence to law enforcement officials
—————————————————————–
============
how to exclude the stderr for this
If you use windows desktop, download nic from nic.comuf.com, good tool for run remote commands on multiple UNIX/Linux hosts.
Am trying to copy file from my local machine to remote servers , i need it to copy using pscp i have tried above command in my linux terminal. can you suggest me
@Deepak,
Have you created PSSH host file with IP address of remote host? If yes, try to run the following command to copy file from local to remote location.
If you still unable to do so, please post the output of the command here, so that we can help you out..