自動化運維之PSSH


1.PSSH簡介

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM