Bash

如何將一個目錄複製到一組伺服器

  • March 30, 2016

我需要將目錄複製到文本文件(主機文件)中列出的不同伺服器。

我還沒有找到任何方法可以用 scp 做這樣的事情

scp -r --hostfile ~/directory to_all@servers:~/

我知道如何為一台伺服器執行此操作:scp -r directory one@server:~/,但不是很多。伺服器的數量各不相同,但我對所有伺服器都使用相同的使用者名。

最簡單的方法是使用 shellfor循環。例如:

for s in server1 server2 server3 ... serverN ; do 
   scp -r directory/ $s:~/
done

一個小的變化是在一個文件(例如server-list.txt)中列出伺服器,每行一個,然後執行以下操作:

for s in $(cat servers.txt) ; do 
   scp -r directory/ $s:~/
done

另一個小的變體支持文件#中的註釋(包括註釋掉伺服器主機名)servers.txt

for s in $(sed -e 's/#.*//' servers.txt) ; do 
   scp -r directory/ $s:~/
done

有無數其他方法可以獲取或生成伺服器列表 - 例如執行mysqlorpsql查詢以從數據庫中提取列表,text/plain從 Web 伺服器獲取文件,從 Web 伺服器獲取文件並使用orjson解析它,還有很多。基本方法保持不變。jq``python -mjson.tool


如果您需要經常使用不同的文件/目錄和/或需要同時在多個伺服器上並行執行 shell 命令,我強烈建議安裝pdsh包並使用pdcp(並行分佈式副本)和pdsh(並行分佈式 shell)命令。 pdsh為大多數發行版打包。

在這裡搜尋pdsh- 有幾個提到它的問題和答案。

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