1. 程式人生 > >Linux下批量管理工具pssh使用記錄

Linux下批量管理工具pssh使用記錄

time etc hosts ptime 同時 參數 -i ble test

pssh是一款開源的軟件,使用python實現,用於批量ssh操作大批量機器;pssh是一個可以在多臺服務器上執行命令的工具,同時支持拷貝文件,是同類工具中很出色的;比起for循環的做法,我更推薦使用pssh!使用pssh的前提是:必須在本機與其他服務器上配置好密鑰認證訪問(即ssh信任關系)。

下面就說下使用pssh進行批量操作的記錄:

1)安裝pssh
可以yum直接安裝:
[root@bastion-IDC ~]# yum install -y pssh

2)pssh用法
[root@bastion-IDC ~]# pssh --help
-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進程 允許命令腳本傳送到標準輸入

3)pssh實例說明
[root@bastion-IDC ~]# cat 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)批量執行命令
[root@bastion-IDC ~]# pssh -h hosts.txt -l root -i ‘uptime‘
[1] 16:05:48 [SUCCESS] 192.168.1.105
03:03:25 up 79 days, 13:44, 0 users, load average: 0.04, 0.01, 0.00

[2] 16:05:48 [SUCCESS] 192.168.1.118
03:03:32 up 75 days, 15:27, 4 users, load average: 0.96, 0.74, 0.45
Stderr: Address 192.168.1.118 maps to localhost, but this does not map back to the address - POSSIBLE BREAK-IN ATTEMPT!
[3] 16:05:48 [SUCCESS] 192.168.1.109
03:03:25 up 61 days, 21:56, 2 users, load average: 0.02, 0.06, 0.18
Stderr: Address 192.168.1.102 maps to localhost, but this does not map back to the address - POSSIBLE BREAK-IN ATTEMPT!
[4] 16:05:48 [SUCCESS] 192.168.1.101
16:03:17 up 35 days, 23:45, 1 user, load average: 0.03, 0.04, 0.01
Stderr: Address 192.168.1.101 maps to localhost, but this does not map back to the address - POSSIBLE BREAK-IN ATTEMPT!

b)批量上傳文件或目錄(pscp.pssh命令)
批量上傳本地文件/mnt/test.file到遠程服務器上的/tmp目錄:
[root@bastion-IDC ~]# pscp.pssh -l root -h hosts.txt /mnt/test.file /tmp/
[1] 16:18:05 [SUCCESS] 192.168.1.105
[2] 16:18:05 [SUCCESS] 192.168.1.109
[3] 16:18:05 [SUCCESS] 192.168.1.101
[4] 16:18:05 [SUCCESS] 192.168.1.118

c)批量下載文件或目錄(pslurp命令)
批量下載服務器上的某文件到本地,不用擔心重名問題,因為pssh已經建立了以文件列表內的ip為名稱的目錄來存放下載的文件:
[root@bastion-IDC ~]# pslurp -l root -h hosts.txt /etc/hosts .
[1] 16:32:01 [SUCCESS] 192.168.1.109
[2] 16:32:01 [SUCCESS] 192.168.1.105
[3] 16:32:01 [SUCCESS] 192.168.1.101
[4] 16:32:01 [SUCCESS] 192.168.1.118
[root@bastion-IDC ~]# ll

d)批量同步(prsync命令)
同步本機/mnt/test目錄下的文件或目錄到遠程機器的/mnt/test路徑下
[root@bastion-IDC ~]# prsync -l root -h hosts.txt -r /mnt/test/ /mnt/test/
[1] 16:46:41 [SUCCESS] 192.168.1.109
[2] 16:46:41 [SUCCESS] 192.168.1.105
[3] 16:46:41 [SUCCESS] 192.168.1.118
[4] 16:46:41 [SUCCESS] 192.168.1.101

e)批量kill遠程機器上的進程(pnuke命令)
比如批量kill掉遠程機器上的nginx進程
[root@bastion-IDC ~]# pnuke -h hosts.txt -l root nginx
[1] 17:09:14 [SUCCESS] 192.168.1.109
[2] 17:09:14 [SUCCESS] 192.168.1.105
[3] 17:09:15 [SUCCESS] 192.168.1.118
[4] 17:09:15 [SUCCESS] 192.168.1.101

Linux下批量管理工具pssh使用記錄