pssh全称是parallel-ssh,基于Python编写的并发在多台服务器上批量执行命令的工具,它支持文件并行复制、远程并行执行命令、杀掉远程主机上的进程等;该工具可以视作ansible的简化版本,不需要安装任何客户端程序,只需要一台控制主机,并保证控制主机与被管理主机之间建立单向互信即可;由于pssh基于python实现的,所以在安装之前务必保证安装好python2.6以上。

pssh工具包主要用法有5个:

  • pssh 多主机并行运行命令
  • pscp 传输文件到多个hosts,他的特性和scp差不多
  • pslurp 从多台远程机器拷贝文件
  • pnuke kill远程机器的进程
  • pslurp 从远程主机考本文件到本地
  • prsync 使用rsync协议从本地计算机同步到远程主机

参数如下:

常用选项:-H  、-h 、-i

–version:查看版本
-h:主机文件列表,内容格式”[user@]host[:port]”
-H:主机字符串,内容格式”[user@]host[:port]”
-l:登录使用的用户名
-p:并发的线程数【可选】
-o:输出的文件目录【可选】
-e:错误输入文件【可选】
-t:TIMEOUT 超时时间设置,0无限制【可选】
-O:SSH的选项
-v:详细模式
-A:提示手动输入密码模式
-x:额外的命令行参数使用空白符号,引号,反斜线处理
-X:额外的命令行参数,单个参数模式,同-x
-i:每个服务器内部处理信息输出
-P:打印出服务器返回信息

1、安装

先安装ez_setup.py,ez_setup.py是python官方给出的一个安装setuptools的工具,利用它,我们可以很轻松用命令行就自动完成安装过程。

[root@nfs-server test]# wget http://peak.telecommunity.com/dist/ez_setup.py
---- ::-- http://peak.telecommunity.com/dist/ez_setup.py
正在解析主机 peak.telecommunity.com... 209.190.5.234
正在连接 peak.telecommunity.com|209.190.5.234|:... 已连接。
已发出 HTTP 请求,正在等待回应... OK
长度: (10K) [text/plain]
正在保存至: “ez_setup.py” %[========================================================================>] , .73K/s eta(英国中部时
%[========================================================================>] , .73K/s in .7s
-- :: (2.73 KB/s) - 已保存 “ez_setup.py” [/]) [root@nfs-server test]# wget http://files.opstool.com/files/pssh-2.3.tar.gz
---- ::-- http://files.opstool.com/files/pssh-2.3.tar.gz
正在解析主机 files.opstool.com... 121.41.227.112
正在连接 files.opstool.com|121.41.227.112|:... 已连接。
已发出 HTTP 请求,正在等待回应... OK
长度: (22K) [application/octet-stream]
正在保存至: “pssh-2.3.tar.gz” %[========================================================================>] , --.-K/s in .05s -- :: ( KB/s) - 已保存 “pssh-2.3.tar.gz” [/])

2、解压安装包并安装:

[root@nfs-server test]# ll
总用量
-rw-r--r-- root root 1月 ez_setup.py
-rw-r--r-- root root 6月 pssh-2.3.tar.gz
-rw-r--r-- root root 8月 : pssh.txt
[root@nfs-server test]# tar xf pssh-2.3.tar.gz
[root@nfs-server test]# cd pssh-2.3
[root@nfs-server pssh-2.3]# python setup.py build
running build
running build_py
running build_scripts
[root@nfs-server pssh-2.3]# python setup.py install
running install
running build
running build_py
creating build
creating build/lib
creating build/lib/psshlib
copying psshlib/__init__.py -> build/lib/psshlib
copying psshlib/cli.py -> build/lib/psshlib
copying psshlib/manager.py -> build/lib/psshlib
copying psshlib/color.py -> build/lib/psshlib
copying psshlib/psshutil.py -> build/lib/psshlib
copying psshlib/askpass_server.py -> build/lib/psshlib
copying psshlib/task.py -> build/lib/psshlib
copying psshlib/askpass_client.py -> build/lib/psshlib
copying psshlib/version.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 to
changing mode of build/scripts-2.6/pnuke from to
changing mode of build/scripts-2.6/prsync from to
changing mode of build/scripts-2.6/pslurp from to
changing mode of build/scripts-2.6/pscp from to
changing mode of build/scripts-2.6/pssh-askpass from to
running install_lib
creating /usr/lib/python2./site-packages/psshlib
copying build/lib/psshlib/__init__.py -> /usr/lib/python2./site-packages/psshlib
copying build/lib/psshlib/cli.py -> /usr/lib/python2./site-packages/psshlib
copying build/lib/psshlib/manager.py -> /usr/lib/python2./site-packages/psshlib
copying build/lib/psshlib/color.py -> /usr/lib/python2./site-packages/psshlib
copying build/lib/psshlib/psshutil.py -> /usr/lib/python2./site-packages/psshlib
copying build/lib/psshlib/askpass_server.py -> /usr/lib/python2./site-packages/psshlib
copying build/lib/psshlib/task.py -> /usr/lib/python2./site-packages/psshlib
copying build/lib/psshlib/askpass_client.py -> /usr/lib/python2./site-packages/psshlib
copying build/lib/psshlib/version.py -> /usr/lib/python2./site-packages/psshlib
byte-compiling /usr/lib/python2./site-packages/psshlib/__init__.py to __init__.pyc
byte-compiling /usr/lib/python2./site-packages/psshlib/cli.py to cli.pyc
byte-compiling /usr/lib/python2./site-packages/psshlib/manager.py to manager.pyc
byte-compiling /usr/lib/python2./site-packages/psshlib/color.py to color.pyc
byte-compiling /usr/lib/python2./site-packages/psshlib/psshutil.py to psshutil.pyc
byte-compiling /usr/lib/python2./site-packages/psshlib/askpass_server.py to askpass_server.pyc
byte-compiling /usr/lib/python2./site-packages/psshlib/task.py to task.pyc
byte-compiling /usr/lib/python2./site-packages/psshlib/askpass_client.py to askpass_client.pyc
byte-compiling /usr/lib/python2./site-packages/psshlib/version.py to version.pyc
running install_scripts
copying build/scripts-2.6/pslurp -> /usr/bin
copying build/scripts-2.6/pnuke -> /usr/bin
copying build/scripts-2.6/pscp -> /usr/bin
copying build/scripts-2.6/prsync -> /usr/bin
copying build/scripts-2.6/pssh-askpass -> /usr/bin
copying build/scripts-2.6/pssh -> /usr/bin
changing mode of /usr/bin/pslurp to
changing mode of /usr/bin/pnuke to
changing mode of /usr/bin/pscp to
changing mode of /usr/bin/prsync to
changing mode of /usr/bin/pssh-askpass to
changing mode of /usr/bin/pssh to
running install_data
creating /usr/man
creating /usr/man/man1
copying man/man1/pssh. -> /usr/man/man1
running install_egg_info
Writing /usr/lib/python2./site-packages/pssh-2.3-py2..egg-info
[root@nfs-server pssh-2.3]# echo $? [root@nfs-server pssh-2.3]# pssh --version
2.3

 测试:

①pssh 多主机并行执行命令

获取每台机器上的时间,先在管理机上新建ip.txt

[root@nfs-server test]# cat pssh.txt
root@192.168.0.117:
root@192.168.0.124:
[root@nfs-server test]# pssh -p 2 -i -h /root/test/ip.txt "date"
[] :: [SUCCESS] root@192.168.0.124:
2019年 08月 03日 星期六 :: CST
[] :: [SUCCESS] root@192.168.0.117:
2019年 08月 03日 星期六 :: CST

②pscp 把文件并行复制到多个机器上:

将本地的/root/kaishi.sh文件复制到目标服务器的/tmp/目录下

[root@nfs-server test]# pscp -h /root/test/pssh.txt /root/kaishi.sh /tmp/
[] :: [SUCCESS] root@192.168.0.124:
[] :: [SUCCESS] root@192.168.0.117:
[root@nfs-server test]# pssh -p 2 -i -h /root/test/pssh.txt "ls /tmp/kaishi.sh"
[] :: [SUCCESS] root@192.168.0.124:
/tmp/kaishi.sh
[] :: [SUCCESS] root@192.168.0.117:
/tmp/kaishi.sh

③prsync 使用rsync协议从本地计算机同步到远程主机

将本地的/etc/sysconfig目录递归同步到目标服务器的 /tmp/目录下,并保持原来的时间戳,使用用户 root

[root@nfs-server test]# prsync -h /root/test/pssh.txt -l -a -r /etc/sysconfig /tmp/test/
[] :: [SUCCESS] root@192.168.0.124:
[] :: [SUCCESS] root@192.168.0.117:
[root@nfs-server test]# pssh -p 2 -i -h /root/test/pssh.txt "ls /tmp/test/"
[] :: [SUCCESS] root@192.168.0.117:
sysconfig

[] :: [SUCCESS] root@192.168.0.124:
sysconfig

④pslurp 将文件从远程主机复制到本地

将目标服务器的/tmp/*.log格式的文件复制到本地的/tmp目录下,并更名为test1.log格式,在/tmp/目录下即可看见以远端IP地址命名为目录,目录中存放复制过来的文件。

[root@nfs-server test]# pslurp -p 2  -h /root/test/pssh.txt -L /tmp -l root /tmp/*.log test1.log
[1] 07:36:06 [SUCCESS] 192.168.0.124:22
[2] 07:36:06 [SUCCESS] 192.168.0.117:22
[root@nfs-server test]# ll /tmp/
总用量 16
drwxr-xr-x 2 root root 4096 8月 3 07:36 192.168.0.117
drwxr-xr-x 2 root root 4096 8月 3 07:36 192.168.0.124
drwxr-xr-x. 7 root root 4096 7月 30 22:00 sysconfig
drwxr-xr-x 3 root root 4096 8月 3 07:16 test
[root@nfs-server test]# cat /tmp/192.168.0.117/test1.log
117
[root@nfs-server test]# cat /tmp/192.168.0.124/test1.log
124

⑤pnuke 并行在远程主机杀进程:

将远端服务器nginx进程杀死

[root@nfs-server test]# pssh -p 2 -i -h /root/test/pssh.txt "lsof -i:80"  #查看远端nginx状态
[] :: [SUCCESS] root@192.168.0.117:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx root 7u IPv4 0t0 TCP *:http (LISTEN)
nginx nginx 7u IPv4 0t0 TCP *:http (LISTEN)
[] :: [SUCCESS] root@192.168.0.124:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx root 6u IPv4 0t0 TCP *:http (LISTEN)
nginx nginx 6u IPv4 0t0 TCP *:http (LISTEN)
[root@nfs-server test]# pnuke -p 2 -h /root/test/pssh.txt nginx #杀死远端nginx进程
[] :: [SUCCESS] root@192.168.0.117:
[] :: [SUCCESS] root@192.168.0.124:
[root@nfs-server test]# pssh -p -i -h /root/test/pssh.txt "lsof -i:80"
[] :: [FAILURE] root@192.168.0.124: Exited with error code
[] :: [FAILURE] root@192.168.0.117: Exited with error code

其实集群管理的工具有很多,例如saltstack,puppet,func等,当机器数量比较多的时候,就需要考虑合适的工具来管理的,这样工作效率就会大大提高,事半功倍。

pssh安装及使用的更多相关文章

  1. Linux下批量管理工具pssh安装和使用

    Linux下批量管理工具pssh安装和使用 pssh工具包 安装:yum -y install pssh pssh:在多个主机上并行地运行命令 pscp:把文件并行地复制到多个主机上 prsync:通 ...

  2. pssh安装和使用

    前提,安装了python.pssh安装下载pssh-2.2.2.tar.gztar zxvf pssh-2.2.2.tar.gzcd pssh-2.2.2python setup.py buildpy ...

  3. 运维工具pssh和pdsh安装和使用

    1. pssh安装与使用 1.1 pssh安装 [root@server]# wget http://peak.telecommunity.com/dist/ez_setup.py [root@ser ...

  4. pssh命令详解

    基础命令学习目录首页 原文链接:https://www.cnblogs.com/kevingrace/p/6378719.html pssh提供OpenSSH和相关工具的并行版本.包括pssh,psc ...

  5. 批量部署 自动化之 - [pssh](转)

    并行执行命令工具简介 作为运维工程师来讲,机器数量到一定级别的时候,批量运维和管理机器就是一件费神的事情,还好有很多可以批量并行执行命令的工具,比如 pssh , python fabrictaoba ...

  6. 轻量集群管理工具PSSH

    PSSH 的意思是 Parallel SSH,并行的SSH,很好理解,PSSH 可以让一条命令在多个服务器上同时执行 这就简化了集群的管理工作,例如想查看一下各台服务器现在的负载状况,就可以通过 PS ...

  7. 使用PSSH批量操作Linux服务器

    简介 服务器多了,有一个问题就是如何批量快速操作多台服务器,在网上搜到了PSSH工具,试用了一下发现挺好用,推荐给大家. pssh是一个python编写的可以在多台服务器上执行命令的轻量级管理工具,同 ...

  8. 轻量级自动化工具 pssh

    pssh应用场景 pssh是一个用python编写的可以并发在多台服务器上批量执行命令的工具,它支持文件并行复制,远程并行执行命令,其中文件并行复制是pssh的核心功能,也是同类工具中的一个亮点. 要 ...

  9. 自动化运维工具——pssh

    PSSH介绍 pssh是一个python编写可以在多台服务器上执行命令的工具,同时支持拷贝文件,是同类工具中很出色的.它的用法可以媲美ansible的一些简单用法,执行起来速度比ansible快它支持 ...

随机推荐

  1. 011 @Retryable的使用

    一:概述 在调用第三方接口或者使用mq时,会出现网络抖动,连接超时等网络异常,所以需要重试. 为了使处理更加健壮并且不太容易出现故障,后续的尝试操作,有时候会帮助失败的操作最后执行成功. 例如,由于网 ...

  2. Jmeter之测试计划

    一.打开jmeter时会有一个测试计划默认显示,界面如下: 二.测试计划各个配置项说明 1.名称:即整个测试计划的名称,已实际项目命名为好: 2.注释:即添加一些备注信息,以便后期回顾时查看: 3.用 ...

  3. 关于LPC MUD的关键字及其它重要术语

    关于LPMUD的关键字及其它重要术语 前面的内容中对LPC语言和 lpmud 做了介绍,也完成了学习开发的准备工作,为了更好的学习,这里先对基本术语做一个说明. 关键字(Keywords):LPC语言 ...

  4. Java面试题大汇总(附答案)

    下列面试题都是在网上收集的,本人抱着学习的态度找了下参考答案,有不足的地方还请指正,更多精彩内容可以关注我的微信公众号:Java团长 相关概念 面向对象的三个特征 封装,继承,多态.这个应该是人人皆知 ...

  5. memcached概述与基本操作

    memcached 什么是memcached memcached之前是danga的一个项目,最早是为LiveJournal服务的,当初设计师为了加速LiveJournal访问速度而开发的,后来被很多大 ...

  6. vue-cli3 每次打包都改变css img js文件名,还有自带版本号

    let Version = new Date().getTime(); css: { // 是否使用css分离插件 ExtractTextPlugin extract: { //一种方式,打包后的cs ...

  7. Saltstack限制某些shell命令执行

    在cmdmod模块中cmd.run.cmd.run_all.cmd.run_stdout等都可以执行shell命令,要静止某些shell命令,可以修改_run()这个函数来彻底的静止调用这个命令. c ...

  8. 在ensp上配置Hybrid接口

    Hybrid接口是华为特有的一种接口 Hybrid接口是既可以连接普通终端的接入链路,又可以连接交换机间的干道链路. 简单说就是Hybrid接口既能实现Access的功能又能实现Trunk接口的功能. ...

  9. PHP 23种设计模式

    学习PHP,对设计模式永远是逃不掉的:今天把php23种设计模式及其demo好好整理如下: 记录PHP关于23种设计模式的简单Demo. Demo地址:https://segmentfault.com ...

  10. (四)linux 学习 --使用命令

    The Linux Command Line 读书笔记 - 部分内容来自 http://billie66.github.io/TLCL/book/chap06.html 文章目录 什么是命令 是哪一种 ...