Ssh

在許多伺服器上通過 SSH 自動執行命令

  • October 25, 2021

.txt 文件中有一個 IP 地址列表,例如:

1.1.1.1
2.2.2.2
3.3.3.3

每個 IP 地址後面都有一個伺服器,並且在每個伺服器上都有一個在埠 22 上執行的 sshd。並非每個伺服器都在known_hosts列表中(在我的 PC 上,Ubuntu 10.04 LTS/bash)。

如何在這些伺服器上執行命令並收集輸出?

理想情況下,我想在所有伺服器上並行執行這些命令。

我將在所有伺服器上使用公鑰身份驗證。

以下是一些潛在的陷阱:

  • ssh 提示我將給定的伺服器 ssh 密鑰放入我的known_hosts文件中。
  • 給定的命令可能會返回非零退出程式碼,表明輸出可能無效。我需要認識到這一點。
  • 與給定伺服器的連接可能無法建立,例如由於網路錯誤。
  • 應該有一個超時,以防命令執行時間超過預期或伺服器在執行命令時出現故障。

伺服器是 AIX/ksh(但我認為這並不重要。

有幾種工具可讓您同時登錄並在多台機器上執行一系列命令。這裡有一對:

如果你更喜歡Python腳本而不是 bash腳本,那麼Fabric可能是適合你的工具。

Fabric 首頁

Fabric 是一個 Python(2.5 或更高版本)庫和命令行工具,用於簡化 SSH 在應用程序部署或系統管理任務中的使用。

它提供了一套用於執行本地或遠端 shell 命令(通常或通過 sudo)和上傳/下載文件的基本操作,以及提示正在執行的使用者輸入或中止執行等輔助功能。

典型用途包括創建一個包含一個或多個函式的 Python 模組,然後通過 fab 命令行工具執行它們。

引用自:https://unix.stackexchange.com/questions/19008