如何在多台远程服务器上同时运行命令


OpenSSH 是一个广泛使用的工具,用于访问远程服务器、复制或传输文件以及执行各种系统管理任务。使用 OpenSSH 时需要注意的是,您无法一次性在多台远程服务器上运行相同的命令。但是,别灰心!让我们了解一下 **PSSH**(**Parallel SSH**),这是一个简单而有用的 OpenSSH 替代方案,允许您从单个终端在多台服务器上运行命令。听起来不错?继续阅读以了解更多信息 –

**PSSH** 包含以下命令:

  • **pssh**: 一次性 SSH 到多台服务器
  • **pscp**: 将文件传输和复制到多个远程系统
  • **prsync**: 并行地将文件复制到多个主机
  • **pnuke**: 终止多个远程主机上的进程
  • **pslurp**: 将文件从多个远程主机复制到中央主机

在本文中,我们将讨论如何在实际环境中安装和使用 Pssh。

在 Linux 中安装 PSSH 或 Parallel SSH

安装 Pssh 最简单的方法是使用 **pip**。对于那些还不了解的人来说,**pip** 是一个包管理系统,用于安装和管理用 **Python** 编写的软件包。PSSH 支持 Python 2.4 及更高版本。

大多数 Linux 发行版的默认存储库中都提供 Pip。运行以下命令在您的 Linux 发行版中安装 python-pip。

运行以下命令在您的 Linux 发行版中安装 python-pip。

在 Arch Linux 及其衍生版上

sudo pacman -S python-pip

在 RHEL、CentOS、Fedora 上

sudo yum install python-pip

或者:

sudo dnf install python-pip

在 Debian、Ubuntu 及其衍生版上

sudo apt-get install python-pip

安装 pip 后,运行以下命令安装 Pssh。此命令适用于所有 Linux 发行版。

sudo 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/pssh-askpass to 755
changing mode of /usr/local/bin/pslurp to 755
changing mode of /usr/local/bin/pscp 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
Successfully installed pssh
Cleaning up...

Pssh 已安装到我们的系统中。让我们看一些实际示例,学习如何在实际环境中使用 Pssh。

Pssh 用法

Pssh 的用法非常简单!您需要创建一个主机文件,并在其中添加远程服务器的 IP 地址和 SSH 端口号。

现在让我们创建一个主机文件

sudo nano hostfile.txt

您可以使用任何您喜欢的文件名。然后,按如下所示逐一添加远程服务器的详细信息 –

192.168.1.100:22
192.168.1.102:22

这里,**192.168.1.100** 和 **192.168.1.102** 是我的远程 Linux 主机的 IP 地址。保存并关闭文件。现在是测试一些命令的时候了。

让我们使用一个命令检查两台远程服务器的运行时间。为此,请运行

pssh -h hostfile.txt -l sk -A -i "uptime"

**重要提示:**这里,**sk** 是我的远程服务器的用户名。请注意,您需要在所有远程服务器上都有一个名为 **sk** 的用户,并且 **密码相同**。否则,此命令将无法运行。因此,必须在所有远程服务器上使用相同的用户名和密码。清楚了吗?很好。

输入用户“sk”的密码。

示例输出

Warning: do not enter your password if anyone else has superuser
privileges or access to your account.
Password:
[1] 17:02:08 [SUCCESS] 192.168.1.100:22
17:02:23 up 5:10, 1 user, load average: 0.24, 0.38, 0.61
[2] 17:02:08 [SUCCESS] 192.168.1.150:22
17:02:22 up 50 min, 1 user, load average: 0.00, 0.01, 0.05

该命令将显示两台远程服务器的运行时间。

**警告:**使用 Pssh 时需要非常小心。由于它旨在一次在多台服务器上运行单个命令,因此一个错误的命令会同时损害多台服务器。因此,使用它时要非常谨慎。

让我们检查两台服务器的内核版本。为此,请运行

pssh -h hostfile.txt -l sk -A -i "uname -r"

示例输出

Warning: do not enter your password if anyone else has superuser
privileges or access to your account.
Password:
[1] 17:06:13 [SUCCESS] 192.168.1.100:22
4.8.13-1-ARCH
[2] 17:06:13 [SUCCESS] 192.168.1.150:22
3.10.0-327.22.2.el7.x86_64

让我们向所有远程服务器发送一条消息。

pssh -h hostfile.txt -l sk -A echo "Welcome to Tutroialpoint!!"

我可以一次将文件复制到所有远程服务器吗?是的,当然可以!

让我们使用单个命令将名为 **test.txt** 的文件复制到所有远程服务器。

pscp -h hostfile.txt -l sk -Av -r test.txt /tmp/

示例输出

Warning: do not enter your password if anyone else has superuser
privileges or access to your account.
Password:
[1] 17:36:59 [SUCCESS] 192.168.1.100:22
[2] 17:37:03 [SUCCESS] 192.168.1.150:22

现在,让我们转到远程服务器并检查 test.txt 文件是否已复制到 /tmp/ 目录中。

太好了!test.txt 在那里。

这同样适用于目录。要复制目录,请运行

pscp -h hostfile.txt -l sk -Av -r tutorialspoint/ /tmp/

更多详细信息,请参考手册页。

man pssh

上述命令会将名为 **tutorialspoint** 的本地目录复制到远程系统的 /tmp/ 目录。

目前就到这里。希望本指南有所帮助。有关 Linux 的更多有趣更新,请继续阅读我们的文章。

更新于:2020年1月23日

浏览量 1000+

开启你的职业生涯

通过完成课程获得认证

开始学习
广告
© . All rights reserved.