1.PSSH簡介
PSSH提供OpenSSH和相關工具的並行版本。包括pssh,pscp,prsync,pnuke和pslurp。該項目包括psshlib,可以在自定義應用程序中使用。
pssh是python寫的可以並發在多台機器上批量執行命令的工具,它的用法可以媲美ansible的一些簡單用法,執行起來速度比ansible快它支持文件並行復制,遠程命令執行,殺掉遠程主機上的進程等等。殺手鐧是文件並行復制,,當進行再遠程主機批量上傳下載的時候,最好使用它。
項目地址: https://code.google.com/archive/p/parallel-ssh/

2.PSSH使用
2.1 安裝PSSH
前提條件:注意需要安裝 python 2.4 或以上版本
wget https://clsn.io/files/pssh/pssh-2.3.1.tar.gz
tar zxf pssh-2.3.1.tar.gz
cd pssh-2.3.1
python setup.py install
安裝過程
[root@clsn.io /opt/pssh-2.3.1]
#python setup.py install
running install
running build
running build_py
creating build
creating build/lib
creating build/lib/psshlib
copying psshlib/task.py -> build/lib/psshlib
copying psshlib/askpass_server.py -> build/lib/psshlib
copying psshlib/__init__.py -> build/lib/psshlib
copying psshlib/cli.py -> build/lib/psshlib
copying psshlib/psshutil.py -> build/lib/psshlib
copying psshlib/manager.py -> build/lib/psshlib
copying psshlib/askpass_client.py -> build/lib/psshlib
copying psshlib/version.py -> build/lib/psshlib
copying psshlib/color.py -> build/lib/psshlib
running build_scripts
creating build/scripts-2.6
copying and adjusting bin/pssh -> build/scripts-2.6
copying and adjusting bin/pnuke -> build/scripts-2.6
copying and adjusting bin/prsync -> build/scripts-2.6
copying and adjusting bin/pslurp -> build/scripts-2.6
copying and adjusting bin/pscp -> build/scripts-2.6
copying and adjusting bin/pssh-askpass -> build/scripts-2.6
changing mode of build/scripts-2.6/pssh from 644 to 755
changing mode of build/scripts-2.6/pnuke from 644 to 755
changing mode of build/scripts-2.6/prsync from 644 to 755
changing mode of build/scripts-2.6/pslurp from 644 to 755
changing mode of build/scripts-2.6/pscp from 644 to 755
changing mode of build/scripts-2.6/pssh-askpass from 644 to 755
running install_lib
creating /usr/lib/python2.6/site-packages/psshlib
copying build/lib/psshlib/task.py -> /usr/lib/python2.6/site-packages/psshlib
copying build/lib/psshlib/askpass_server.py -> /usr/lib/python2.6/site-packages/psshlib
copying build/lib/psshlib/__init__.py -> /usr/lib/python2.6/site-packages/psshlib
copying build/lib/psshlib/cli.py -> /usr/lib/python2.6/site-packages/psshlib
copying build/lib/psshlib/psshutil.py -> /usr/lib/python2.6/site-packages/psshlib
copying build/lib/psshlib/manager.py -> /usr/lib/python2.6/site-packages/psshlib
copying build/lib/psshlib/askpass_client.py -> /usr/lib/python2.6/site-packages/psshlib
copying build/lib/psshlib/version.py -> /usr/lib/python2.6/site-packages/psshlib
copying build/lib/psshlib/color.py -> /usr/lib/python2.6/site-packages/psshlib
byte-compiling /usr/lib/python2.6/site-packages/psshlib/task.py to task.pyc
byte-compiling /usr/lib/python2.6/site-packages/psshlib/askpass_server.py to askpass_server.pyc
byte-compiling /usr/lib/python2.6/site-packages/psshlib/__init__.py to __init__.pyc
byte-compiling /usr/lib/python2.6/site-packages/psshlib/cli.py to cli.pyc
byte-compiling /usr/lib/python2.6/site-packages/psshlib/psshutil.py to psshutil.pyc
byte-compiling /usr/lib/python2.6/site-packages/psshlib/manager.py to manager.pyc
byte-compiling /usr/lib/python2.6/site-packages/psshlib/askpass_client.py to askpass_client.pyc
byte-compiling /usr/lib/python2.6/site-packages/psshlib/version.py to version.pyc
byte-compiling /usr/lib/python2.6/site-packages/psshlib/color.py to color.pyc
running install_scripts
copying build/scripts-2.6/pscp -> /usr/bin
copying build/scripts-2.6/prsync -> /usr/bin
copying build/scripts-2.6/pnuke -> /usr/bin
copying build/scripts-2.6/pssh -> /usr/bin
copying build/scripts-2.6/pssh-askpass -> /usr/bin
copying build/scripts-2.6/pslurp -> /usr/bin
changing mode of /usr/bin/pscp to 755
changing mode of /usr/bin/prsync to 755
changing mode of /usr/bin/pnuke to 755
changing mode of /usr/bin/pssh to 755
changing mode of /usr/bin/pssh-askpass to 755
changing mode of /usr/bin/pslurp to 755
running install_data
creating /usr/man
creating /usr/man/man1
copying man/man1/pssh.1 -> /usr/man/man1
copying man/man1/pscp.1 -> /usr/man/man1
copying man/man1/prsync.1 -> /usr/man/man1
copying man/man1/pslurp.1 -> /usr/man/man1
copying man/man1/pnuke.1 -> /usr/man/man1
running install_egg_info
Writing /usr/lib/python2.6/site-packages/pssh-2.3.1-py2.6.egg-info
2.2 安裝完成
使用yum安裝后,只能使用pssh,但是編譯安裝后會包括其他命令也安裝了(pscp prsync pnuke pslurp)
pssh:在遠程多台主機上並行運行命令
Example: pssh -h hosts.txt -l irb2 -o /tmp/foo uptime
pscp :把文件並行復制到多台遠程主機上
Example: pscp -h hosts.txt -l irb2 foo.txt /home/irb2/foo.txt
prsync:使用rsync協議本地文件同步到遠程多台主機上。
Example: prsync -r -h hosts.txt -l irb2 foo /home/irb2/foo
pnuke:在遠程多台主機上並行killall某一進程
Example: pnuke -h hosts.txt -l irb2 java
pslurp:把文件從遠程多台主機上復制到本地主機上
Example: pslurp -h hosts.txt -L /tmp/outdir -l irb2
/home/irb2/foo.txt foo.txt
2.3 pssh參數說明
-h HOST_FILE 后邊跟遠程主機列表(ip)
-H HOST_STRING 后邊跟遠程主機名或者ip地址
-l USER 指定遠程主機的用戶名-p PAR 指定pssh最大的並行線程數。
-o 將輸出的內容重定向到一個指定的文件中
-O 指定ssh參數的具體配置
-e 將執行錯誤重定向到一個指定的文件中
-t 設定命令執行超時時間
-x 傳遞ssh命令的一些參數
-i 在遠程主機上執行命令完成后顯示標准輸出和標准錯誤
-P 在執行遠程命令時,輸出執行結果
2.4 其他常用的方法
pssh使用幫助
pssh --help
pssh查看所有服務器的uptime
-h list 指定了執行命令的機器列表
-A表示提示輸入密碼(如果機器都是ssh key打通的則無需加-A)
pssh -i -A -h list 'uptime'
使用pscp向一堆機器分發文件
pscp -h list localfile remote_dir
從一堆機器中拷貝文件到中心機器
pslurp -h list /etc/hosts local_dir
2.5 常見問題
如果你遇到這樣的錯誤:
IOError: [Errno 4] Interrupted system call
建議升級python版本到python2.7
3.附錄
3.1 pssh CLSN站點鏡像地址
本站將pssh軟件包鏡像到本地,以防丟失,有需求的可以執行下載,下載后注意校驗MD5值。
|
File
|
Summary + Labels
|
Uploaded
|
Size
|
|
PSSH 2.3.1 Source
|
Feb 3, 2012
|
22.88KB
|
|
|
PSSH 2.3 Source
|
Jan 25, 2012
|
21.62KB
|
|
|
PSSH 2.2.2 Source
|
Feb 3, 2011
|
20.94KB
|
|
|
PSSH 2.2.1 Source
|
Jan 27, 2011
|
20.88KB
|
|
|
PSSH 2.2 Source
|
Jan 27, 2011
|
20.84KB
|
|
|
PSSH 2.1.1 Source
|
Mar 5, 2010
|
17.94KB
|
|
|
PSSH 2.1 Source
|
Feb 26, 2010
|
17.65KB
|
|
|
PSSH 2.0 Source
|
Oct 21, 2009
|
15.03KB
|
3.2 pssh GOOGLE源
| File | Summary + Labels | Uploaded | Size |
|---|---|---|---|
| pssh-2.3.1.tar.gz | PSSH 2.3.1 Source | Feb 3, 2012 | 22.88KB |
| pssh-2.3.tar.gz | PSSH 2.3 Source | Jan 25, 2012 | 21.62KB |
| pssh-2.2.2.tar.gz | PSSH 2.2.2 Source | Feb 3, 2011 | 20.94KB |
| pssh-2.2.1.tar.gz | PSSH 2.2.1 Source | Jan 27, 2011 | 20.88KB |
| pssh-2.2.tar.gz | PSSH 2.2 Source | Jan 27, 2011 | 20.84KB |
| pssh-2.1.1.tar.gz | PSSH 2.1.1 Source | Mar 5, 2010 | 17.94KB |
| pssh-2.1.tar.gz | PSSH 2.1 Source | Feb 26, 2010 | 17.65KB |
| pssh-2.0.tar.gz | PSSH 2.0 Source | Oct 21, 2009 | 15.03KB |
3.3 文件包MD5值
下載完成后務必校驗MD5值
| MD5值 | 文件名 |
|---|---|
| dbdbfda5681b82d4c64abdb3668e88bc | pssh-2.3.tar.gz |
| 53e70d53064f658bf8f44880340e8e5c | pssh-2.3.1.tar.gz |
| 689207677b260a7e4178174295b1389e | pssh-2.2.tar.gz |
| 865305ae39647884bc54a42e9f9554bb | pssh-2.2.2.tar.gz |
| f7583259976ef64bf3cae957a0b66e41 | pssh-2.2.1.tar.gz |
| 725f902bb7e128cc7aa1322551f7ca37 | pssh-2.1.tar.gz |
| 4b355966da91850ac530f035f7404cd5 | pssh-2.1.1.tar.gz |
| 07474f9f9dbefedc809e997f04e1dee5 | pssh-2.0.tar.gz |
4.參考文獻
https://code.google.com/archive/p/parallel-ssh/
http://opstool.com/article/266
https://www.cnblogs.com/Dicky-Zhang/p/5988415.html
https://help.aliyun.com/knowledge_detail/38835.html
