如何在多臺遠端伺服器上同時執行命令


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.