輕量級運維利器pssh、pdsh和mussh的使用以及區別

                         運維利器pssh、pdsh和mussh的使用技巧

今天週末,加上下雨天。沒打算出門,翻了幾頁書,怕日後容易忘記,做個筆記,總結一下批量運維工具的一些使用方法以及異同之處。


其中給出pssh的5個程序的使用方法圖解:

wKiom1lrQB-w3dBpAAW9Sp687Wo975.jpg-wh_50



區別:

pssh有5個程序 

pssh:執行命令 pscp:上傳文件 pslurp:下載文件到本機 

prsync:將本地文件同步到遠程主機  pnuke殺死遠程主機的某個進程(如httpd)


pdsh有兩個方法:

pdsh:執行命令,類似pssh,但增加了命令交互模式以及正則表達式,更靈活。

pdcp:上傳文件到遠程主機,與pscp類似,但管理主機和遠程主機都要安裝pdsh包。


mussh:

mussh:批量執行遠程管理命令,主要是比pssh,pdsh增加了一個可執行腳本的功能。(shell,Perl,Python腳本)  指定的參數作用跟pssh 有很大區別。



原理:基於ssh祕鑰認證建立信任,在本管理主機上運行pssh、pdsh和mussh工具命令將shell命令發送至管理遠程主機(單主機或主機羣),相當於登陸到遠程主機上執行了同樣的shell命令。

由於條件限制,只有兩臺虛擬機,一臺用於模擬管理,一臺用於模擬遠程主機。

管理主機IP:192.168.1.106   (master1)

遠程主機IP:192.168.1.108   (master2)


一、在本地主機上創建RSA密鑰和公鑰。

以本地普通用戶soul用戶登陸爲例。

本管理主機以及所有遠程主機的普通賬戶密碼均設置爲soul,123456(測試環境)

1、在管理主機上建立密鑰過程:

[soul@master1 root]$ mkdir ~/.ssh

[soul@master1 root]$ chmod 700 ~/.ssh

[soul@master1 root]$ cd ~/.ssh

[soul@master1 .ssh]$ ssh-keygen -t rsa   //全部默認,一路回車。


#將本生成的公鑰文件整合爲 authorized_keys,進行授權後複製到遠程主機的同目錄下.ssh/,需要在遠程主機soul用戶根目錄下建立目錄#mkdir ~/.ssh   #chmod 700 ~/.ssh


[soul@master1 .ssh]$ cat /home/soul/.ssh/id_rsa.pub > authorized_keys  

[soul@master1 .ssh]$ chmod 600 ~/.ssh/authorized_keys 

[soul@master1 .ssh]$ scp authorized_keys [email protected]:/home/soul/.ssh/

2、測試ssh祕鑰認證。


[soul@master1 .ssh]$ ssh 192.168.1.108 uptime

 14:40:17 up  4:47,  3 users,  load average: 1.60, 1.73, 1.78

測試成功,已經建立信任。


有朋友可能會有疑問:直接用ssh就可以進行遠程管理了啊,爲毛還要pssh、pdsh和mussh工具?因爲ssh只能單臺執行命令,不能批量同時管理遠程主機。pssh、pdsh和mussh是一款爲了可以批量管理遠程主機而開發的工具。

A: pssh的安裝與用法:

5個主程序:

pssh:在遠程多臺主機上並行運行命令。就是執行shell命令

pscp:將本地主機上的文件並行複製到遠程多臺主機上。就是上傳文件到遠程主機上

pslurp:遠程多臺主機上的文件複製到本地主機上。就是下載文件到本地管理主機。與pscp相反

prsync:使用rsync協議將管理主機本地文件同步到遠程多臺主機上。

pnuke:在多臺遠程主機上並行killall某一服務進程。


參數介紹:

具體常用介紹:

-h   HOST_FILE   後邊跟遠程主機列表(ip)

-H   HOST_STRING   後邊跟遠程主機名或者ip地址

-l   USER  指定遠程主機的用戶名

-p  PAR   指定pssh最大的並行線程數。

-o  將輸出的內容重定向到一個指定的文件中

-O 指定ssh參數的具體配置

-e  將執行錯誤重定向到一個指定的文件中

-t  設定命令執行超時時間

-x  傳遞ssh命令的一些參數

-i  在遠程主機上執行命令完成後顯示標準輸出和標準錯誤

-P  在執行遠程命令時,輸出執行結果

下載安裝pssh-2.3.1

#wget http://files.opstool.com/files/pssh-2.3.1.tar.gz

# tar zxvf pssh-2.3.1.tar.gz

# cd pssh-2.3.1

# python setup.py build

# python setup.py install


1、批量查看遠程主機信息

單臺主機

[soul@localhost root]$pssh -H [email protected] -P date

192.168.1.108: 2017年 06月 08日 星期四 16:39:03 CST

[1] 15:26:01 [SUCCESS] [email protected]

[soul@localhost root]$ pssh -H [email protected]:2202 -P uptime //當遠程主機端口不爲默認22

192.168.1.108:  16:39:12 up  6:46,  2 users,  load average: 1.49, 1.94, 1.96

[1] 15:26:10 [SUCCESS] [email protected]


-H 爲指定某一臺主機/IP  -P爲打印出返回的結果內容  date爲要執行的shell命令


2、批量文件列表:

建立文件/etc/pssh/hosts 並授權權限chmod給soul用戶

#cat /etc/pssh/hosts

192.168.1.108

14.152.49.51:2202

[soul@localhost pssh]$ pssh -i -O "StrictHostKeyChecking=no" -h /etc/pssh/hosts "uptime"

[1] 15:41:23 [SUCCESS] 14.152.49.51:2202

 15:48:22 up 43 days,  6:40,  2 users,  load average: 0.00, 0.02, 0.00

[2] 15:41:23 [SUCCESS] 192.168.1.108

 16:54:25 up  7:01,  2 users,  load average: 1.55, 2.10, 2.06


-i爲標準輸出,跟-P直接打印有區別。-O 大寫 爲指定ssh參數的具體配置“StrictHostKeyChecking=no”參數可以讓遠程主機自動接受本地主機的key,不用每次都手動輸入yes確認。 -h指定文件主機列表



3、遠程執行解壓文件安裝包


#pssh -i -H [email protected] "tar -zxvf /usr/local/src/pssh-2.3.1.tar.gz"

文件必須放在soul根目錄並有執行權限,假如在root目錄下需要sudo

#pssh -i -H [email protected] "sudo "tar -zxvf /usr/local/src/pssh-2.3.1.tar.gz" "


報錯:Stderr: sudo: sorry, you must have a tty to run sudo

解決:vi /etc/sudoers  註釋掉 Default requiretty 一行   #Default requiretty

好像還是解決不了


4、pscp 將本地文件傳到遠程主機

[soul@localhost root]$pscp  -H [email protected] /etc/ssh/ssh_config /tmp

[soul@localhost root]$pscp  -H [email protected]  -r /etc/ssh/ /tmp

-r 指拷貝文件目錄


5、pslurp 將遠程主機文件下載到本機

[soul@localhost root]$pslurp -H [email protected] -L /tmp/ /tmp/ssh_config ssh_config

[1] 16:26:47 [SUCCESS] [email protected]

-L 指定存放到本地哪個路徑下 下載遠程主機的/tmp/ssh_config文件到本地名爲ssh_config

但下載後的結果會自動以IP或者主機名創建一個目錄 以便分清是從哪臺主機上下載下來的。如果是下載文件目錄 需要在-L 前面加-r參數


6、prsync:使用rsync協議將管理主機本地文件同步到遠程多臺主機上。

[soul@localhost root]$ /usr/local/python27/bin/prsync -h /etc/pssh/hosts -l soul -a -r /etc/httpd /tmp/

[1] 16:32:55 [SUCCESS] 192.168.1.108

遠程主機上查看

[root@master2 tmp]# ll

總計 8

drwxr-xr-x 3 soul soul 4096 01-02 11:37 httpd

             -l 指定遠程用戶 -a 指定文件的屬性不變,-r 文件目錄迭代

7、在多臺遠程主機上並行killall某一服務進程。

/usr/local/python27/bin/pnuke -H [email protected] mysqld

[1] 16:45:45 [SUCCESS] [email protected]

測試了幾次都沒有殺死mysqld進程j_0064.gif爲什麼?


B: pdsh的安裝與用法:

http://code.google.com/p/pdsh/

[root@server ~]# tar jxvf pdsh-2.29.tar.bz2
[root@server ~]# cd pdsh-2.29
[root@server pdsh-2.29]#./configure --with-ssh --with-rsh --with-mrsh --with-mqshell --with-qshell --with-dshgroups --with-machines=/etc/pdsh/machines
[root@server pdsh-2.29]# make
[root@server pdsh-2.29]# make install

在執行configure階段,“--with-ssh”參數表示啓用ssh模塊,其他參數都有類似的含義,而“--with-dshgroups”表示啓用主機組支持,啓用此參數後,就可以將一組主機列表寫入一個文件並放到~/.dsh/group或/etc/dsh/group目錄下,然後通過pdsh的“-g”參數進行調用。最後的參數“--with-machines”是“--with-dshgroups”參數的擴展,通過將所有要管理的主機列表都寫入指定的/etc/pdsh/machines文件中,接着通過pdsh的“-a”參數調用,最終完成所有主機的便捷管理。

1、pdsh:批量執行命令。類似pssh   但多了交互命令模式以及正則表達式功能

2、pdcp:批量將本地文件/目錄複製上傳到遠程主機上。類似pscp  但pdcp需要在管理主機跟遠程主機同時安裝pdcp。所以文件上傳推薦使用pscp就行了


pdsh語法介紹:

-w host,host

指定遠程主機,可以指定多個,每個主機用逗號隔開,host可以是主機名也可以是IP地址。

#pdsh -w ssh:user001,ssh:user002,ssh:user003 "date"

此命令用來查看user001、user002、user003主機上的時間,其中ssh表示在遠程主機上執行命令的形式,默認是rsh。

正則表達式

#pdsh -w ssh:user00[1-10] "date"

此命令用於在user001到user0010上執行date命令。

pdsh -w ssh:user0[10-31],/1$/ "uptime"

此命令在選擇遠程主機時使用了正則表達式,表示在user010到user031中選擇以1結尾的主機名,即在user011、user021、user031上執行uptime命令


-R

指定使用rcmd的模塊名,默認是rsh。如果要選擇ssh,可以通過如下方式指定:

pdsh -R ssh -w user00[1-10] "date"


-l

指定在遠程主機上使用的用戶名稱。例如:

pdsh -R ssh -l opsuser -w user00[1-9] "date"

-x

此參數用來排除某些或某個主機,例如:

pdsh -R ssh -l opsuser -w user00[1-9] -x user005,user007 "date"

-t  指定連接遠程主機的超時時間,以秒爲單位,默認是10秒,可以通過此參數修改默認值,例如:pdsh -R ssh -w slave000[1-9]  -t 15  "date"

-u設置遠程命令執行的超時時間,以秒爲單位,以ssh方式連接時,默認時間爲無限

-f 設置同時連接到遠程主機的個數

-N    此參數用來關閉遠程主機所返回結果中的主機名顯示

-a   通過此參數可以指定所有的遠程主機,設置此參數後,pdsh默認會查看/etc/machines文件中的主機列表,要改變此路徑,在編譯pdsh時通過“--with-machines”參數指定即可

-g   此參數用來指定一組遠程主機,在編譯pdsh時可以通過“--with-dshgroups”參數來激活此選項,默認可以將一組主機列表寫入一個文件中並放到本地主機的~/.dsh/group或/etc/dsh/group目錄下,這樣就可以通過“-g”參數調用了。例如:pdsh -R ssh -g userhosts "date",其中“userhosts”是一個主機列表文件,可以將此文件放在~/.dsh/group或/etc/dsh/group目錄下

-X  此參數用來排除指定組內的所有主機,經常與“-a”參數一起使用。例如:

pdsh -R ssh -a -X userhosts  "date"


C:做主機ssh封裝器mussh

mussh 主要是增加了腳本執行的功能。

mussh的突出功能是可以在多臺遠程主機上執行本地的腳本,包括shell,Perl,Python腳本。


下載https://mussh.sourceforge.net/

解壓即可使用


tar -zxvf mussh-1.0.tgz

#cd mussh-1.0


參數:


d [n]          Shell調試模式,n取值:0-2

-v [n]          SSH調試模式,n取值:0-3

-m [n]          併發進程數,如果設置爲0,則表示沒限制

-q              安靜模式

-i [identity ..] 加載密鑰文件

-o    設置ssh參數

-b              將每個主機的輸出打印到一個塊中,不和其它主機輸出混合

-B              允許所有主機輸出混合在一起,默認值

-u              去除重複的主機名,默認值

-U              不管指定的主機名是否重複

-P              如果密鑰認證失敗,不不提示輸入密碼登錄

-l       在遠程主機上執行命令的用戶

-s       指定在遠程主機上執行腳本的shell路徑,例如:mussh -s /usr/bin/python -C mysql_check.py

-t        在遠程主機上執行命令的超時時間

-h        指定某一臺主機,或同時多臺,用逗號分隔。

-H        指定某一個文件列表。

-c        指定執行某一個或多個shell命令,用逗號隔開。

-C        指定執行某一個腳本文件。


[soul@localhost mussh]$mussh -H /etc/mussh/hosts -l soul -c uptime


[soul@localhost mussh]$mussh -o "port=2202" -H /etc/mussh/hosts -s "/usr/bin/python /home/mysqlback.py"


pssh、pdsh和mussh三個工具的使用區別介紹到這裏。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章