Ssh

跨多個伺服器送出“ps”,輸出到一個文本文件

  • January 26, 2019

我正在嘗試建構一個腳本,該腳本將跨 66 個 redhat 框輸出所有已失效的程序到單個文本文件。我了解在一個盒子上執行此操作的原則,但我不確定如何將該過程硬塞到一個可以在一個盒子上執行的東西中,但要查詢幾個盒子。

所以,我找到了這個小腳本:

for host in $(cat hosts.txt); do ssh "$host" "$command" >"output.$host"; done

我知道我基本上可以送出ps -ef | grep "defunct"$command,但我認為我創建的任何輸出文件都將被拖放到執行它的主機上。

我需要從一個盒子執行,將輸出儲存在那個盒子上,但包含其他 65 個盒子的資訊?

我相信我們有無密碼的 ssh。我對 Unix 的了解是中級的,我知道一些,因為我使用的是 SAS。

重定向發生在呼叫機器上,而不是遠端機器上,因此結果文件將是本地的。此外,grep不需要遠端執行:

while read -r host; do
   ssh "$host" ps -ef | grep "defunct" >"output.$host"
done <hosts.txt

ps -ef在每台主機上執行grep並將提取defunct輸出行。將grep在本地執行,而不是遠端執行。結果文件同樣是在本地創建的。

如果你想要一個輸出文件:

while read -r host; do
   ssh "$host" ps -ef | grep "defunct"
done <hosts.txt >output.txt

甚至(對於單次呼叫grep

while read -r host; do
   ssh "$host" ps -ef 
done <hosts.txt | grep "defunct" >output.txt

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