pssh命令詳解

  

基礎命令學習目錄首頁javascript

 

原文連接:https://www.cnblogs.com/kevingrace/p/6378719.htmlhtml

pssh提供OpenSSH和相關工具的並行版本。包括pssh,pscp,prsync,pnuke和pslurp。該項目包括psshlib,能夠在自定義應用程序中使用。pssh是python寫的能夠併發在多臺機器上批量執行命令的工具,它的用法能夠媲美ansible的一些簡單用法,執行起來速度比ansible快它支持文件並行複製,遠程命令執行,殺掉遠程主機上的進程等等。殺手鐗是文件並行複製,,當進行再遠程主機批量上傳下載的時候,最好使用它。pssh用於批量ssh操做大批量機器;pssh是一個能夠在多臺服務器上執行命令的工具,同時支持拷貝文件,是同類工具中很出色的;比起for循環的作法,更推薦使用pssh! (注意須要安裝 python 2.4 或以上版本)
各版本下載地址: https://clsn.io/files/pssh/
百度下載地址:https://pan.baidu.com/s/1co3Hwoc0yI4LAKvXoXPzfg (提取密碼: d2jy)
java

[root@bastion-IDC ~]# wget https://clsn.io/files/pssh/pssh-2.3.1.tar.gz
[root@bastion-IDC ~]# tar zxf pssh-2.3.1.tar.gz
[root@bastion-IDC ~]# cd pssh-2.3.1
[root@bastion-IDC pssh-2.3.1]# python setup.py installpython

-l        遠程機器的用戶名
-p       一次最大容許多少鏈接
-o       輸出內容重定向到一個文件
-e       執行錯誤重定向到一個文件
-t        設置命令執行的超時時間
-A      提示輸入密碼而且把密碼傳遞給ssh(注意這個參數添加後只是提示做用,隨便輸入或者不輸入直接回車均可以)
-O      設置ssh參數的具體配置,參照ssh_config配置文件
-x      傳遞多個SSH 命令,多個命令用空格分開,用引號括起來
-X     同-x 可是一次只能傳遞一個命令
-i      顯示標準輸出和標準錯誤在每臺host執行完畢後
-I      讀取每一個輸入命令,並傳遞給ssh進程 容許命令腳本傳送到標準輸入
nginx

//列表文件內的信息格式是「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批量執行時,輪到這臺沒有作信任關係的機器時就不會執行。
shell

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!
vim

若是添加-A參數,那麼即便提早作了ssh信任關係,仍是會提示輸入密碼!
[root@bastion-IDC ~]# pssh -h hosts.txt -l root -i -A 'uptime'
Warning: do not enter your password if anyone else has superuser
privileges or access to your account.
Password:                          //注意這個參數添加後只是提示做用,能夠在此隨便輸入或者不輸入直接回車均可以
[1] 16:08:25 [SUCCESS] 192.168.1.105
03:06:03 up 79 days, 13:46, 0 users, load average: 0.00, 0.00, 0.00
[2] 16:08:25 [SUCCESS] 192.168.1.109
03:06:03 up 61 days, 21:59, 2 users, load average: 0.00, 0.04, 0.15
Stderr: Address 192.168.1.102 maps to localhost, but this does not map back to the address - POSSIBLE BREAK-IN ATTEMPT!
[3] 16:08:25 [SUCCESS] 192.168.1.101
16:05:54 up 35 days, 23:47, 1 user, load average: 0.00, 0.02, 0.00
Stderr: Address 192.168.1.101 maps to localhost, but this does not map back to the address - POSSIBLE BREAK-IN ATTEMPT!
[4] 16:08:25 [SUCCESS] 192.168.1.118
03:06:10 up 75 days, 15:29, 4 users, load average: 0.85, 0.78, 0.51
Stderr: Address 192.168.1.118 maps to localhost, but this does not map back to the address - POSSIBLE BREAK-IN ATTEMPT!
centos

[root@bastion-IDC ~]# pssh -h hosts.txt -l root -i -t 10 -o /root/pssh.log 'uptime && date'
[1] 17:01:02 [SUCCESS] 192.168.1.109
03:58:33 up 79 days, 5:58, 1 user, load average: 0.00, 0.00, 0.00
Wed Feb 8 03:58:33 EST 2017
[2] 17:01:02 [SUCCESS] 192.168.1.105
03:58:40 up 79 days, 14:39, 1 user, load average: 0.00, 0.00, 0.00
Wed Feb 8 03:58:40 EST 2017
[3] 17:01:02 [SUCCESS] 192.168.1.101
16:58:31 up 36 days, 40 min, 1 user, load average: 0.10, 0.03, 0.01
Wed Feb 8 16:58:31 CST 2017
Stderr: Address 192.168.1.101 maps to localhost, but this does not map back to the address - POSSIBLE BREAK-IN ATTEMPT!
[4] 17:01:02 [SUCCESS] 192.168.1.118
03:58:47 up 75 days, 16:22, 3 users, load average: 0.20, 0.21, 0.31
Wed Feb 8 03:58:47 EST 2017
Stderr: Address 192.168.1.118 maps to localhost, but this does not map back to the address - POSSIBLE BREAK-IN ATTEMPT!
[root@bastion-IDC ~]# ll /root/pssh.log/
total 16
-rw-r--r--. 1 root root 100 Feb 8 17:01 192.168.1.101
-rw-r--r--. 1 root root 99 Feb 8 17:01 192.168.1.105
-rw-r--r--. 1 root root 99 Feb 8 17:01 192.168.1.109
-rw-r--r--. 1 root root 100 Feb 8 17:01 192.168.1.118
bash

b)批量上傳文件或目錄(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
服務器

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

注意:
上面批量同步目錄操做是將本機對應目錄數據同步到遠程機器上,遠程機器上對於目錄下多餘的文件也會保留(不會刪除多餘文件)

同理,批量同步文件操做,去掉-r參數,
注意:同步文件的時候,其實就是徹底覆蓋,遠程機器對應文件內的文件會被所有替換!
以下:
同步本機的/mnt/test/file文件內容到遠程服務器/mnt/test/file文件內
[root@bastion-IDC ~]# prsync -l root -h hosts.txt /mnt/test/file /mnt/test/file
[1] 16:53:54 [SUCCESS] 192.168.1.109
[2] 16:53:54 [SUCCESS] 192.168.1.105
[3] 16:53:54 [SUCCESS] 192.168.1.101
[4] 16:53:54 [SUCCESS] 192.168.1.118
[root@bastion-IDC ~]# prsync -l root -h hosts.txt /mnt/test/file /mnt/aaa
[1] 16:54:03 [SUCCESS] 192.168.1.109
[2] 16:54:03 [SUCCESS] 192.168.1.105
[3] 16:54:03 [SUCCESS] 192.168.1.101
[4] 16:54:04 [SUCCESS] 192.168.1.118

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

***************當你發現本身的才華撐不起野心時,就請安靜下來學習吧***************
 
 
安裝說明
由於最近在搭建ovirt虛擬化管理平臺,在建立vm後,須要對vm進行壓力測試,因此須要經過pssh來進行併發對多臺vm執行stress進行壓力測試。
安裝pssh以前,將多臺vm之間設置爲ssh免密碼訪問
#ssh-keygen#ssh-copy-ip root@10.10.200.36#ssh-copy-ip root@10.10.200.37#ssh-copy-ip root@10.10.200.38#ssh-copy-ip root@10.10.200.39#ssh-copy-ip root@10.10.200.40#ssh-copy-ip root@10.10.200.41#ssh-copy-ip root@10.10.200.42
安裝pssh
#yum install pssh
安裝完成後,測試下pssh的效果,經過執行uptime命令來檢測效果
建立list文件,在list文件中寫入所需進行併發的主機ip
10.10.200.3610.10.200.3710.10.200.3810.10.200.3910.10.200.4010.10.200.4110.10.200.42
然後執行pssh命令
[root@37_centos6 files]# pssh -i -h list 'uptime'[1] 02:21:45 [SUCCESS] 10.10.200.39 14:21:44 up 22 min,  1 user,  load average: 0.00, 0.00, 0.00[2] 02:21:45 [SUCCESS] 10.10.200.42 02:21:45 up 22 min,  1 user,  load average: 0.00, 0.00, 0.00[3] 02:21:45 [SUCCESS] 10.10.200.41 02:21:45 up 22 min,  1 user,  load average: 0.00, 0.02, 0.00[4] 02:21:45 [SUCCESS] 10.10.200.40 02:21:44 up 22 min,  1 user,  load average: 0.00, 0.00, 0.00[5] 02:21:45 [SUCCESS] 10.10.200.37 02:21:45 up  5:09,  1 user,  load average: 0.07, 0.04, 0.00[6] 02:21:45 [SUCCESS] 10.10.200.38 02:21:44 up 22 min,  0 users,  load average: 0.05, 0.04, 0.01[7] 02:21:45 [SUCCESS] 10.10.200.36 14:21:45 up 43 min,  0 users,  load average: 0.00, 0.00, 0.00
上述uptime執行沒有問題,如今來經過pssh對各臺vm併發執行stress命令,對vm進行壓力測試
[root@37_centos6 files]# pssh -i -h list 'stress --cpu 1 --io 4 --vm 2 --vm-bytes 128M --timeout 2h'          
查看各臺主機的進程中,查看stress是否進行
[root@39_centos6 ~]# ps -ef | grep stressroot      2310     1  0 14:22 ?        00:00:00 stress --cpu 1 --io 4 --vm 2 --vm-bytes 128M --timeout 2hroot      2317  2310 94 14:22 ?        00:50:56 stress --cpu 1 --io 4 --vm 2 --vm-bytes 128M --timeout 2hroot      2318  2310 28 14:22 ?        00:15:28 stress --cpu 1 --io 4 --vm 2 --vm-bytes 128M --timeout 2hroot      2319  2310 90 14:22 ?        00:49:13 stress --cpu 1 --io 4 --vm 2 --vm-bytes 128M --timeout 2hroot      2320  2310 31 14:22 ?        00:17:01 stress --cpu 1 --io 4 --vm 2 --vm-bytes 128M --timeout 2hroot      2321  2310 85 14:22 ?        00:46:07 stress --cpu 1 --io 4 --vm 2 --vm-bytes 128M --timeout 2hroot      2322  2310 30 14:22 ?        00:16:20 stress --cpu 1 --io 4 --vm 2 --vm-bytes 128M --timeout 2hroot      2323  2310 28 14:22 ?        00:15:36 stress --cpu 1 --io 4 --vm 2 --vm-bytes 128M --timeout 2hroot      2437  2162  0 15:16 pts/0    00:00:00 grep stress
經過以上操做,就完成了pssh對個vm併發執行stress進行壓力測試。
---------------------
做者:bobpen
來源:CSDN
原文:https://blog.csdn.net/bobpen/article/details/52638489
版權聲明:本文爲博主原創文章,轉載請附上博文連接!
 
 
原文連接:https://my.oschina.net/xiaoxiezi/blog/1491630

1.先生成本機(master)密鑰對

ssh-keygen -t rsa -C '' 

  直接按三次回車, 這條命令是生成無密碼的密鑰對,你也能夠在‘’裏面加郵箱。

生成的密鑰對在 ~/.ssh/ 目錄下面  id_rsa  和id_rsa.pub.

2.將id_rsa.pub私鑰放入須要被無密碼登錄的主機。

在master主機中使用命令查看,複製查詢結果:

cat ~/.ssh/id_rsa.pub

3.粘貼到client主機

vim  ~/.ssh/authorized_keys

4.在client主機中開啓ssh免密碼登錄

vim /etc/ssh/sshd_config中

RSAAuthentication yes # 啓用 RSA 認證 PubkeyAuthentication yes # 啓用公鑰私鑰配對認證方式 AuthorizedKeysFile .ssh/authorized_keys # 公鑰文件路徑(和上面生成的文件同)

5.在master主機上執行。

ssh-copy-id  -i ~/.ssh/id_rsa.pub "-p  22   root@192.168.6.102"   ~/.ssh/authorized_keys

須要輸入一次client主機密碼

6.下載pssh並安裝(master)

#wget https://pypi.python.org/packages/source/p/pssh/pssh-2.3.1.tar.gz  #tar -zxvf pssh-2.3.1.tar.gz  #cd pssh-2.3.1  #python setup.py install

7.在master主機創建ip庫

格式:ip:端口(22端口能夠省略)

#vim iplist_config

按上面格式存儲

8.執行命令

pssh -P -h iplist_config -i 'ls -a'

展現root目錄下的文件,替換爲你須要的命令。

9.向多個ip批量複製文件

好比:將本地 /etc/sysconfig/network文件,發送到遠程主機的/tmp/network 位置。

pscp -h test.txt /etc/sysconfig/network /tmp/network 

9.END.

相關文章
相關標籤/搜索