Ssh
在許多伺服器上通過 SSH 自動執行命令
.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 是一個 Python(2.5 或更高版本)庫和命令行工具,用於簡化 SSH 在應用程序部署或系統管理任務中的使用。
它提供了一套用於執行本地或遠端 shell 命令(通常或通過 sudo)和上傳/下載文件的基本操作,以及提示正在執行的使用者輸入或中止執行等輔助功能。
典型用途包括創建一個包含一個或多個函式的 Python 模組,然後通過 fab 命令行工具執行它們。