No doubt, that OpenSSH is one of the most widely used and powerful tools available for Linux, which 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 disadvantage of OpenSSH is that you cannot execute the same command on multiple hosts at one go and OpenSSH is not developed to perform such tasks.
This is where the Parallel SSH or PSSH tool comes in handy, is a Python-based application, that allows you to execute commands on multiple hosts in parallel at the same time.
PSSH tool includes parallel versions of OpenSSH and related tools such as:
- pssh – is a program for running ssh in parallel on 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 the PSSH (i.e. version 2.3.1) program on RHEL-based distributions such as Fedora, CentOS Stream, Rocky & AlmaLinux and Debian-based distributions such as Ubuntu and Linux Mint using the pip command.
The pip command is a small program (replacement of easy_install script) for installing and managing Python software packages index.
On RHEL-Based Distributions
On RHEL distributions, you need to first install the pip package (i.e., python-pip) on your system to install the PSSH program using yum or dnf.
yum install python-pip OR dnf install python-pip
Once you’ve installed the pip tool, you can install the pssh package using the pip command, as shown below.
pip install pssh
On Debian-Based Distributions
On Debian-based distributions, it takes a minute to install pssh using the pip command.
sudo apt install python-pip sudo pip install pssh
How Do I Use pssh in Linux?
When using pssh you need to create a host file with the number of hosts along with the 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
Run Single Command On Multiple Linux Servers
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 host 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 it to SSH, use the
-A
option.
Let’s see a few examples and usage of pssh commands:
Run Commands on Multiple Linux Hosts
1. To execute echo “Hello TecMint” on the terminal of the multiple Linux hosts by the 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 the list of the remote Linux server’s IP address and SSH port number that you wish to execute commands.
Find Disk Usage of Multiple Linux Hosts
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
Find Uptime of Multiple Linux Hosts
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 in case of any additional information about pssh or errors while installing or using it, feel free to post a comment.