如何在多台远程服务器上同时运行命令
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 的更多有趣更新,请继续阅读我们的文章。
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP