![](/img/trans.png)
[英]Bash script pass ssh command to remote server and bring back the prompt
[英]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.