基礎命令學習目錄首頁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.118bash
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
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.