Pssh - 使用单个终端在多个远程 Linux 服务器上执行命令
毫无疑问,OpenSSH是 Linux 上使用最广泛、功能最强大的工具之一,它允许您通过 shell 安全地连接到远程 Linux 系统,并允许您安全地与远程系统传输文件。
但OpenSSH最大的缺点是,您无法一次在多台主机上执行相同的命令,而且 OpenSSH 并非为执行此类任务而开发的。这时Parallel SSH或PSSH工具就派上用场了,它是一款基于 Python 的应用程序,允许您同时在多台主机上并行执行命令。
不要错过:使用 DSH 工具在多个 Linux 服务器上执行命令
PSSH工具包括 OpenSSH 的并行版本和相关工具,例如:
- pssh – 是一个在多个远程主机上并行运行 ssh 的程序。
- pscp – 是一个用于并行将文件复制到多个主机的程序。
- prsync – 是一个用于高效地将文件并行复制到多个主机的程序。
- pnuke – 并行终止多个远程主机上的进程。
- pslurp – 将文件从多个远程主机并行复制到中央主机。
这些工具对于那些需要在网络上处理大量节点的系统管理员来说非常有用。
在 Linux 上安装 PSSH 或并行 SSH
在本指南中,我们将介绍使用pip命令在基于Fedora的发行版(例如CentOS / RedHat和Debian衍生产品(例如Ubuntu / Mint) )上安装最新版本的 PSSH(即版本2.3.1)程序的步骤。
pip命令是一个用于安装和管理 Python 软件包索引的小程序(easy_install脚本的替代)。
在基于 Fedora 的发行版上
在CentOS / RHEL发行版上,您需要首先在系统下安装 pip(即 python-pip)包,以便安装 PSSH 程序。
# yum install python-pip
在Fedora 21+上,您需要运行dnf 命令而不是 yum(dnf 取代了 yum)。
# dnf install python-pip
安装 pip 工具后,您可以借助 pip 命令安装 pssh 包,如下所示。
# pip install 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 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
关于 Debian 衍生产品
在基于 Debian 的发行版上,使用 pip 命令安装 pssh 需要一分钟。
$ sudo apt-get install python-pip $ sudo pip install pssh
示例输出
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...
从上面的输出可以看出,系统上已经安装了最新版本的 pssh。
如何使用 pssh?
使用pssh时,您需要创建一个主机文件,其中包含使用 pssh 连接到远程系统所需的主机数量以及 IP 地址和端口号。
宿主文件中的行采用以下形式,并且还可以包含空行和注释。
192.168.0.10:22 192.168.0.11:22
使用 pssh 在多台服务器上执行单个命令
您可以通过运行pssh命令在网络上的不同或多个 Linux 主机上执行任何单个命令。pssh 有许多选项可供使用,如下所述:
我们将研究使用带有不同选项的 pssh 在多个主机上执行命令的几种方法。
- 要读取主机文件,请包含-h host_file-name或–hosts host_file_name选项。
- 要在所有未定义特定用户的主机上包含默认用户名,请使用-l用户名或–user 用户名选项。
- 您还可以在每个主机完成时显示标准输出和标准错误。通过使用-i或–inline选项。
- 您可能希望通过包含-t number_of_seconds选项来使连接在给定的秒数之后超时。
- 要将标准输出保存到给定目录,可以使用-o /directory/path选项。
- 要询问密码并发送到 ssh,请使用-A选项。
让我们看一些 pssh 命令的例子和用法:
1.要以 root 用户身份在多个 Linux 主机的终端上执行echo “Hello Example”并提示输入 root 用户的密码,请运行以下命令。
重要提示:请记住所有主机都必须包含在主机文件中。
# pssh -h pssh-hosts -l root -A echo "Hello Example" 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
注意:上面的命令中的“ pssh-hosts ”是一个文件,其中列出了您希望执行命令的远程 Linux 服务器的 IP 地址和 SSH 端口号。
2.要找出网络上多个 Linux 服务器的磁盘空间使用情况,可以运行以下命令。
# 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.如果您希望一次了解多台 Linux 服务器的正常运行时间,则可以运行以下命令。
# 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
您可以查看pssh命令的手动输入页面以获取许多其他选项,从而了解更多使用 pssh 的方法。
# pssh --help
概括
并行 SSH或PSSH是系统管理员在需要与网络上的多个服务器协作的环境中执行命令的一个很好的工具。它使在网络上的不同主机上远程执行命令变得容易。
希望您发现本指南很有用,如果有关于 pssh 的任何其他信息或在安装或使用过程中出现错误,请随时发表评论。