簡體   English   中英

bash腳本並行ssh遠程命令

[英]bash script parallel ssh remote command

我有一個腳本,通過ssh連接在幾台不同的機器上觸發遠程命令。 腳本如下:

for server in list; do
echo "output from $server"
ssh to server execute some command
done

這個問題顯然是時間,因為它需要建立ssh連接,fire命令,等待答案,打印它。 我想要的是讓腳本嘗試一次建立連接並返回echo“$ server的輸出”並在命令輸出后立即輸出,所以在列表順序中沒有必要。

我一直在谷歌上搜索一段時間,但沒有找到答案。 我不能在命令運行后取消ssh會話作為一個線程建議,因為我需要一個輸出,我不能使用其他線程中建議的並行gnu。 另外我不能使用任何其他工具,我不能在這台機器上帶任何東西,只有可用的工具是GNU bash,版本4.1.2(1) - 發布。

另一個問題是這樣的ssh會議有限嗎? 如果我只是粘貼5個左右的“ssh connect”行,做一些命令“它實際上什么都不做,或者只在列表中首先執行。 (如果我粘貼3-4行就可以了)。 謝謝

你試過這個嗎?

for server in list; do
  ssh user@server "command" &
done
wait
echo finished

更新:啟動子shell:

for server in list; do
  (echo "output from $server"; ssh user@server "command"; echo End $server) &
done
wait
echo All subshells finished

有幾個並行的SSH工具可以為您處理:

此外,您可能對配置部署解決方案感興趣,例如Chef,Puppet,Ansible,Fabric等(請參閱此摘要 )。

第三種選擇是使用諸如pconsole之類的終端廣播

如果您只能使用GNU命令,則可以像這樣編寫腳本:

for server in $servers ; do
   ( { echo "output from $server" ; ssh user@$server "command" ; } | \
    sed -e "s/^/$server:/" ) & 
done
wait 

然后sort輸出進行sort以協調這些行。

我從這個帖子中提到的shell hacks開始,然后進行了一些更健壯的東西: https//github.com/bearstech/pussh

這是我的日常工作,我基本上在20秒內對250台服務器運行任何東西(實際上速率有限,否則連接速率會殺死我的ssh-agent)。 我多年來一直在使用它。

:從該名男子頁(克隆並運行“人./pussh.1”)見自己https://github.com/bearstech/pussh/blob/master/pussh.1

例子

按降序顯示所有服務器rootfs用法:

pussh -f servers df -h / |grep /dev |sort -rn -k5

計算集群中的處理器數量:

pussh -f servers grep ^processor /proc/cpuinfo |wc -l

顯示處理器模型,按出現次數排序:

pussh -f servers sed -ne "s/^model name.*: //p" /proc/cpuinfo |sort |uniq -c

每個主機在一個文件中獲取已安裝軟件包的列表:

pussh -f servers -o packages-for-%h dpkg --get-selections

批量復制文件樹(廣播):

tar czf files.tar.gz ... && pussh -f servers -i files.tar.gz tar -xzC /to/dest

批量復制幾個遠程文件樹(聚集):

pussh -f servers -o '|(mkdir -p %h && tar -xzC %h)' tar -czC /src/path .

注意pussh -u功能(上傳和執行)是我編程的主要原因,似乎沒有工具可以做到這一點。 我仍然想知道今天情況是否如此。

您可能喜歡使用pssh命令的parallel-ssh項目

pssh -h servers.txt -l user command

成功執行命令后,每個服務器將輸出一行。 使用-P選項,您還可以看到命令的輸出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM