自動化批量管理工具 pssh
pssh提供OpenSSH和相關工具的並行版本。包括pssh,pscp,prsync,pnuke和pslurp。該專案包括psshlib,可以在自定義應用程式中使用。
pssh是python寫的可以併發在多臺機器上批量執行命令的工具,它的用法可以媲美ansible的一些簡單用法,執行起來速度比ansible快它支援檔案並行複製,遠端命令執行,殺掉遠端主機上的程序等等。
殺手鐗是檔案並行複製,,當進行再遠端主機批量上傳下載的時候,最好使用它。pssh用於批量ssh操作大批量機器;pssh是一個可以在多臺伺服器上執行命令的工具,同時支援拷貝檔案,是同類工具中很出色的;比起for迴圈的做法,更推薦使用pssh!
使用pssh的前提是:必須在本機與其他客戶機上配置好金鑰認證訪問(即ssh無密碼登入信任關係)。
下面就說下使用pssh進行批量操作的記錄:
1)安裝pssh
yum install -y pssh
2)pssh用法
-h 執行命令的遠端主機列表檔案 -H user@ip:port 檔案內容格式[user@]host[:port] -l 遠端機器的使用者名稱 -p 一次最大允許多少連線 -o 輸出內容重定向到一個檔案 -e 執行錯誤重定向到一個檔案 -t 設定命令執行的超時時間 -A 提示輸入密碼並且把密碼傳遞給ssh(注意這個引數新增後只是提示作用,隨便輸入或者不輸入直接回車都可以) -O 設定ssh引數的具體配置,參照ssh_config配置檔案 -x 傳遞多個SSH 命令,多個命令用空格分開,用引號括起來 -X 同-x 但是一次只能傳遞一個命令 -i 顯示標準輸出和標準錯誤在每臺host執行完畢後 -I 讀取每個輸入命令,並傳遞給ssh程序 允許命令指令碼傳送到標準輸入
新版命令已變更為:
Usage: parallel-ssh [OPTIONS] command [...] Options: --version show program's version number and exit --help show this help message and exit -h HOST_FILE, --hosts=HOST_FILE hosts file (each line "[user@]host[:port]") -H HOST_STRING, --host=HOST_STRING additional host entries ("[user@]host[:port]") -l USER, --user=USER username (OPTIONAL) -p PAR, --par=PAR max number of parallel threads (OPTIONAL) -o OUTDIR, --outdir=OUTDIR output directory for stdout files (OPTIONAL) -e ERRDIR, --errdir=ERRDIR output directory for stderr files (OPTIONAL) -t TIMEOUT, --timeout=TIMEOUT timeout (secs) (0 = no timeout) per host (OPTIONAL) -O OPTION, --option=OPTION SSH option (OPTIONAL) -v, --verbose turn on warning and diagnostic messages (OPTIONAL) -A, --askpass Ask for a password (OPTIONAL) -x ARGS, --extra-args=ARGS Extra command-line arguments, with processing for spaces, quotes, and backslashes -X ARG, --extra-arg=ARG Extra command-line argument -i, --inline inline aggregated output and error for each server --inline-stdout inline standard output for each server -I, --send-input read from standard input and send as input to ssh -P, --print print output as we get it Example: pssh -h hosts.txt -l irb2 -o /tmp/foo uptime
新舊命令對應:
parallel-nuke --> pnuke
parallel-rsync --> prsync
parallel-scp --> pscp
parallel-slurp --> pslurp
parallel-ssh --> pssh
3)pssh例項說明
hosts.txt檔案內容如下:
(列表檔案內的資訊格式是“ip:埠”,如果本機和遠端機器使用的ssh埠一致,則可以省去埠,直接用ip就行。不過建議還是將埠都帶上為好。)
192.168.1.101:22
192.168.1.109:22
192.168.1.118:25791
192.168.1.105:25791
如上四臺機器放在一個列表檔案hosts.txt內,本機已經和這四臺機器做了ssh無密碼登陸的信任關係
注意:列表檔案內的機器必須提前和本機做好ssh信任關係,如果沒有做的話,那麼pssh批量執行時,輪到這臺沒有做信任關係的機器時就不會執行。
a)批量執行命令
pssh -h hosts.txt -l root -i 'uptime'
如果新增-A引數,那麼即使提前做了ssh信任關係,還是會提示輸入密碼!
pssh -h hosts.txt -l root -i -A 'uptime'
pssh -h hosts.txt -l root -i -t 10 -o /root/pssh.log 'uptime && date'
b)批量上傳檔案或目錄(pscp)
批量上傳本地檔案/mnt/test.file到遠端伺服器上的/tmp目錄:
pscp -l root -h hosts.txt /mnt/test.file /tmp/
批量上傳本地檔案/mnt/test.file、/mnt/aa.file、/mnt/bb.file到遠端伺服器上的/tmp目錄:
pscp -l root -h hosts.txt /mnt/test.file /mnt/aa.file /mnt/bb.file /tmp/
或者:
pscp -l root -h hosts.txt /mnt/{test.file,aa.file,bb.file} /tmp/
批量上傳本地目錄/mnt/zhong到遠端伺服器上的/tmp目錄(上傳目錄需要新增-r引數):
pscp -l root -h hosts.txt -r /mnt/zhong /tmp/
批量上傳本地目錄/mnt/zhong、/mnt/aa、/mnt/vv到遠端伺服器上的/tmp目錄
pscp -l root -h hosts.txt -r /mnt/zhong /mnt/aa /mnt/vv /tmp/
或者:
pscp -l root -h hosts.txt -r /mnt/{zhong,aa,vv} /tmp/
c)批量下載檔案或目錄(pslurp)
批量下載伺服器上的某檔案到本地,不用擔心重名問題,因為pslurp已經建立了以檔案列表內的ip為名稱的目錄來存放下載的檔案:
pslurp -l root -h hosts.txt /etc/hosts .
另外特別注意:
上面的批量下載操作,只能下載到本地的當前目錄下,不能在命令中跟指定的路徑:
pslurp -l root -h hosts.txt /etc/hosts /mnt/
要想下載到本機的/mnt目錄下,正確的做法是先切換到/mnt目錄下,然後再執行下載命令:(列表檔案要跟全路徑)
pslurp -l root -h /root/hosts.txt /etc/hosts ./
上面是批量下載檔案,要是批量下載目錄,只需要新增一個-r引數即可!
pslurp -l root -h /root/hosts.txt -r /home/ ./
d)批量同步(prsync)
同步本機/mnt/test目錄下的檔案或目錄到遠端機器的/mnt/test路徑下
prsync -l root -h hosts.txt -r /mnt/test/ /mnt/test/
同步本機/mnt/test目錄下的檔案或目錄到遠端機器的/mnt路徑下
prsync -l root -h hosts.txt -r /mnt/test/ /mnt/
【注意:上面批量同步目錄操作是將本機對應目錄資料同步到遠端機器上,遠端機器上對於目錄下多餘的檔案也會保留(不會刪除多餘檔案)】
同理,批量同步檔案操作,去掉-r引數。
【注意:同步檔案的時候,其實就是完全覆蓋,遠端機器對應檔案內的檔案會被全部替換!】
如下:同步本機的/mnt/test/file檔案內容到遠端伺服器/mnt/test/file檔案內
prsync -l root -h hosts.txt /mnt/test/file /mnt/test/file
prsync -l root -h hosts.txt /mnt/test/file /mnt/aaa
e)批量kill遠端機器上的程序(pnuke)
比如批量kill掉遠端機器上的nginx程序
pnuke -h hosts.txt -l root nginx
作者:Varden
出處:http://www.cnblogs.com/varden/
本文內容如有雷同,請聯絡作者!
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線,否則保留追究法律責任的權利。