PSSH是一個批量操作伺服器的軟體,當運維人員負責一個伺服器叢集的時候,面對二三十台伺服器的時候,先把這些伺服器的ip們都寫進一個文檔裡,然後使用pssh 搭配這個文檔,就能一口氣的同時操作這二三十台機器,省事又省力,真是居家旅行節省體力的運維必需品。
安裝
pssh是在python的基礎上編寫出來的腳本指令,是以python是操作pssh的基礎,現在的linux和mac os都自帶python,雖然自帶的是python的版本是2.6.6但是也已經夠用了。
#tar -zxvf pssh-2.3.1.tar.gz
#cd pssh-2.3.1
#python setup.py install
安裝成功的話,就有這樣的提示:
<a href="http://s3.51cto.com/wyfs02/M02/7E/FD/wKioL1cPOimj4ZyGAABD4R0Xe64378.png" target="_blank"></a>
可以看見/usr/bin裡就多了很多的可執行指令,比如說pssh,可以#pssh --help一下,就知道其具體的用法了。
各指令解析和用法
pssh 多主機并行運作指令
pscp 傳輸檔案到多個hosts,他的特性和scp差不多
pslurp 從多台遠端機器拷貝檔案
pnuke kill遠端機器的程序
pslurp 從遠端主機考本檔案到本地
prsync 使用rsync協定從本地計算機同步到遠端主機,這個協定很重要,比如說購物網站,某個物品隻有一個,一旦這個物品被買走了,資料庫就發生了變化,同時使用prsync指令把資料與其他主機進行同步,其他的伺服器也會更新"此物品已經售罄"。
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 顯示succeed或者failed
-I 讀取每個輸入指令,并傳遞給ssh程序 允許指令腳本傳送到标準輸入
-P 列印輸出
具體操作
pssh伺服器的ip位址是203.90.146.243,而它所管理的伺服器們的ip可以寫進一個文檔裡,由于本實驗室比較拮據,隻有一個linux伺服器,而這台伺服器的ip位址是203.90.146.239。于是我們可以先寫一個叫ip.txt這個文檔,裡面的内容就是所管理伺服器的ip位址。
<a href="http://s3.51cto.com/wyfs02/M01/7F/01/wKioL1cPmJaABbXcAACIYj3LJjY434.png" target="_blank"></a>
由上圖可以看到ip.txt這個文檔的内容而且,這兩台機器之間是可以互相ping通的。
下面也是幾個常見的用法舉例:
1
<code>#pssh -i -A -h ip.txt uptime</code>
這個指令就是向ip.txt文檔裡的ip發送“uptime”(檢視運作時間)的意思。其中-A就是要提供對方伺服器的密碼。輸入後的結果如圖:
<a href="http://s4.51cto.com/wyfs02/M01/7F/04/wKiom1cPmU6TMZ_8AABml-HHGUc751.png" target="_blank"></a>
<code>#pssh -i -A -h ip.txt ls</code>
這個指令是“向ip.txt裡的文檔的所有ip位址發送ls指令”,這個指令如果不加絕對路徑就是作用于目标伺服器目前目錄下的。
<code>#pscp -A -h ip.txt aaa.txt /data/mysql</code>
這個指令意思是“把目前目錄下的aaa.txt 檔案向ip.txt裡的所有位址的/data/mysql檔案夾裡一一發送"。
<code>#pslurp -A -h ip.txt /A/B/old.txt /new.log</code>
這個指令的意思是“ 把ip.txt裡所有的目标機器裡的/A/B/檔案夾的old.txt檔案拉到pssh伺服器的目前伺服器裡,pssh會根據ip.txt的不同ip建立不同的子檔案夾,同時把old.txt改名叫new.log。
<code>#prsync -h ip.txt -l dongwm -a -r /etc/sysconfig /tmp/etc</code>
這個指令的意思是“将本地的/etc/sysconfig目錄遞歸同步到目标伺服器的 /tmp/etc目錄下,并保持原來的時間戳,使用的使用者名是dongwm“。
<code>#pnuke -h ip.txt apache</code>
這個指令的意思是"遠端kill掉目标名單裡所有的apache的程序"。
參考文章:http://www.ibm.com/developerworks/cn/aix/library/au-spunix_remoteserver/index.html
本文轉自 蘇幕遮618 51CTO部落格,原文連結:http://blog.51cto.com/chenx1242/1763781