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. 平时常说的ThreadLocal,今天就彻底解决它

    前言 一.了解ThreadLocal的作用 二.ThreadLocal简单使用 三.ThreadLocal原理 3.1 ThreadLocal的存取过程 3.2 探究ThreadLocalMap对象 ...

  2. 用Python实现的Internet电话软件(P2P-SIP)<开源>

    本博客为本人学习笔记,代码出自GitHub:https://github.com/theintencity/p2p-sip 由于GitHub原著为英文,且相当的啰嗦,本文为翻译内容并去除其啰嗦的部分 ...

  3. ou can mix require and export. You can't mix import and module.exports.

    ou can mix require and export. You can't mix import and module.exports.

  4. 【神经网络与深度学习】【CUDA开发】服务器(多GPU)caffe安装和编译

    一. 前提 多GPU交互在神经网络是常见的,所以在安装caffe之前需要安装NCCL,来保证多GPU之间的相互交流.  多GPU,这里指的是2个及2个以上英伟达显卡,而不是笔记本中的集显和独显. 二. ...

  5. Python MySQLdb 学习总结(转)

    转自http://www.cnblogs.com/coser/archive/2012/01/12/2320741.html 感谢@糖拌咸鱼 任何应用都离不开数据,所以在学习python的时候,当然也 ...

  6. Docker的基础教程(基于CentOS)

    1.查看版本 Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker . 通过 uname -r 命令查看你当前的内核 ...

  7. LeetCode 513. 找树左下角的值(Find Bottom Left Tree Value)

    513. 找树左下角的值 513. Find Bottom Left Tree Value 题目描述 给定一个二叉树,在树的最后一行找到最左边的值. LeetCode513. Find Bottom ...

  8. LeetCode 22. 括号生成(Generate Parentheses)

    22. 括号生成 22. Generate Parentheses 题目描述 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合. 例如,给出 n = 3,生成结 ...

  9. Jackson 动态Bean

    为了解决json字符串有很多属性, 但是不必每个属性都映射到pojo的属性. @JsonProperty : 标记一个方法是一个属性的getter或setter方法, 也即把java属性和json域关 ...

  10. docker使用2

    新建并启动容器 docker  run  [options]  imageId options -i  以交互模式运行容器 -t  为容器重新分配一个为终端设备 -p  主机端口:容器端口 --nam ...