pssh & pdsh用法

一、pssh

pssh 是一个 python 编写可以在多台服务器上执行命令的工具,同时支持拷贝文件,是同类工具中很出色的,类似 pdsh 。为方便操作,使用前请在各个服务器上配置好密钥认证访问。项目地址: parallel-ssh

  • yum安装

    yum install pssh
  • 编译安装

    wget http://parallel-ssh.googlecode.com/files/pssh-2.3.1.tar.gz
    tar xf pssh-2.3.1.tar.gz
    cd pssh-2.3.1/
    python setup.py install
  • 选项

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

    获取每台服务器的uptime:
    $ pssh -h ip.txt -i uptime
    
    查看每台服务器上mysql复制IO/SQL线程运行状态信息:
    $ pssh -h IP.txt -i "/usr/local/mysql/bin/mysql -e 'show slave status \G'"|grep Running:
    
    保存每台服务器运行的结果:
    # pssh -h IP.txt -i -o /tmp/pssh/ uptime
  • pssh工具包

    pssh工具包主要有5个程序:
    
    pssh   多主机并行运行命令
    pscp   传输文件到多个hosts,他的特性和scp差不多
    prsync   使用rsync协议从本地计算机同步到远程主机
    pslurp   从多台远程机器拷贝文件到本地
    pnuke    kill远程机器的进程
    
    
    1.pssh  多主机并行运行命令
    [root@server pssh-2.2.2]# pssh -P -h test.txt uptime
    192.168.9.102:  14:04:58 up 26 days, 17:05,  0 users,  load average: 0.07, 0.02, 0.00
    192.168.9.102: [1] 14:04:58 [SUCCESS] 192.168.9.102 9922
    192.168.8.171:  14:04:59 up 35 days,  2:01,  6 users,  load average: 0.00, 0.00, 0.00
    192.168.8.171: [2] 14:04:59 [SUCCESS] 192.168.8.171 22
    192.168.9.104:  14:04:59 up 7 days, 20:59,  0 users,  load average: 0.10, 0.04, 0.01
    192.168.9.104: [3] 14:04:59 [SUCCESS] 192.168.9.104 9922
    [root@server pssh-2.2.2]# cat test.txt
    192.168.9.102:9922
    192.168.9.104:9922
    192.168.8.171:22   //注意我的端口号不仅是默认的22
    假如想将输出重定向到一个文件 加-o file 选项
    
    2.pscp  把文件并行地复制到多个主机上 注意 是从服务器端给客户端传送文件:
    [root@server pssh-2.2.2]# pscp -h test.txt /etc/sysconfig/network /tmp/network   //标示将本地的/etc/sysconfig/network传到目标服务器的/tmp/network
    
    3.prsync 使用rsync协议从本地计算机同步到远程主机
    [root@server ~]# pssh -h test.txt -P mkdir /tmp/etc
    [root@server ~]# prsync -h test.txt -l dongwm -a -r /etc/sysconfig /tmp/etc //标示将本地的/etc/sysconfig目录递归同步到目标服务器的 /tmp/etc目录下,并保持原来的时间戳,使用用户 dongwm
    
    4.pslurp 将文件从远程主机复制到本地,和pscp方向相反:
    [root@server ~]# pslurp -h test.txt -L /tmp/test -l root /tmp/network test  //标示将目标服务器的/tmp/network文件复制到本地的/tmp/test目录下,并更名为test
    [1] 14:53:54 [SUCCESS] 192.168.9.102 9922
    [2] 14:53:54 [SUCCESS] 192.168.9.104 9922
    [root@server ~]# ll /tmp/test/192.168.9.10
    192.168.9.102/ 192.168.9.104/
    [root@server ~]# ll /tmp/test/192.168.9.102/
    总计 4.0K
    -rw-r--r-- 1 root root 60 2011-04-22 14:53 test
    [root@server ~]# ll /tmp/test/192.168.9.104/
    总计 4.0K
    -rw-r--r-- 1 root root 60 2011-04-22 14:53 test
    
    5.pnuke 并行在远程主机杀进程:
    [root@server ~]# pnuke -h test.txt syslog //杀死目标服务器的syslog进程,只要ps进程中出现相关词语 都能杀死
    [1] 15:05:14 [SUCCESS] 192.168.9.102 9922
    [2] 15:05:14 [SUCCESS] 192.168.9.104 9922

二、pdsh

pdsh(Parallel Distributed SHell) 可并行的执行对目标主机的操作,对于批量执行命令和分发任务有很大的帮助,在使用前需要配置 ssh 无密码登录,点击下载

2.1、pdsh 基本用法

$ pdsh -h
Usage: pdsh [-options] command ...
-S                return largest of remote command return values
-h                output usage menu and quit                获取帮助
-V                output version information and quit       查看版本
-q                list the option settings and quit         列出 `pdsh` 执行的一些信息
-b                disable ^C status feature (batch mode)
-d                enable extra debug information from ^C status
-l user           execute remote commands as user           指定远程使用的用户
-t seconds        set connect timeout (default is 10 sec)   指定超时时间
-u seconds        set command timeout (no default)          类似 `-t`
-f n              use fanout of n nodes                     设置同时连接的目标主机的个数
-w host,host,...  set target node list on command line      指定主机,host 可以是主机名也可以是 ip
-x host,host,...  set node exclusion list on command line   排除某些或者某个主机
-R name           set rcmd module to name                   指定 rcmd 的模块名,默认使用 ssh
-N                disable hostname: labels on output lines  输出不显示主机名或者 ip
-L                list info on all loaded modules and exit  列出 `pdsh` 加载的模块信息
-a                target all nodes                          指定所有的节点
-g groupname      target hosts in dsh group "groupname"     指定 `dsh` 组名,编译安裝需要添加 `-g` 支持选项 `--with-dshgroups`
-X groupname      exclude hosts in dsh group "groupname"    排除组,一般和 `-a` 连用
available rcmd modules: exec,xcpu,ssh (default: ssh)        可用的执行命令模块,默认为 ssh

2.2、使用实例

2.2.1、单个主机测试

$ pdsh -w 192.168.0.231 -l root uptime
192.168.0.231:  16:16:11 up 32 days, 22:14, ? users,  load average: 0.10, 0.14, 0.16

2.2.2、多个主机测试

$ pdsh -w 192.168.0.[231-233] -l root uptime
192.168.0.233:  16:17:05 up 32 days, 22:17, ? users,  load average: 0.13, 0.12, 0.10
192.168.0.232:  16:17:05 up 32 days, 22:17, ? users,  load average: 0.45, 0.34, 0.27
192.168.0.231:  16:17:06 up 32 days, 22:15, ? users,  load average: 0.09, 0.13, 0.15

2.2.3、逗号分隔主机

$ pdsh -w 192.168.0.231,192.168.0.234 -l root uptime
192.168.0.234:  16:19:44 up 32 days, 22:19, ? users,  load average: 0.17, 0.21, 0.20
192.168.0.231:  16:19:44 up 32 days, 22:17, ? users,  load average: 0.29, 0.18, 0.16

2.2.4、-x 排除某个主机

$ pdsh -w 192.168.0.[231-233] -x 192.168.0.232 -l root uptime
192.168.0.233:  16:18:24 up 32 days, 22:19, ? users,  load average: 0.11, 0.12, 0.09
192.168.0.231:  16:18:25 up 32 days, 22:16, ? users,  load average: 0.11, 0.13, 0.15

2.2.5、主机组

对于 -g 组,把对应的主机写入到 /etc/dsh/group/ 或 ~/.dsh/group/ 目录下的文件中即可,文件名就是对应组名

$ cat ~/.dsh/group/dsh-test
192.168.0.231
192.168.0.232
192.168.0.233
192.168.0.234
$ pdsh -g dsh-test -l root uptime
192.168.0.232:  16:21:38 up 32 days, 22:22, ? users,  load average: 0.01, 0.15, 0.21
192.168.0.231:  16:21:38 up 32 days, 22:19, ? users,  load average: 0.17, 0.16, 0.16
192.168.0.234:  16:21:39 up 32 days, 22:21, ? users,  load average: 0.15, 0.19, 0.19
192.168.0.233:  16:21:40 up 32 days, 22:22, ? users,  load average: 0.15, 0.15, 0.10

2.2.6、dshbak 格式化输出

pdsh 的缺省输出格式为主机名加该主机的输出,在主机或输出多时会比较混乱,可以采用 dshbak 做一些格式化,让输出更清晰。

$ pdsh -g dsh-test -l root 'date'       # 查看哪些主机时间不一样,主机一多,可读性不强
192.168.0.232: Wed Jun 19 16:24:40 CST 2013
192.168.0.231: Wed Jun 19 16:24:40 CST 2013
192.168.0.234: Wed Jun 19 16:24:40 CST 2013
192.168.0.233: Wed Jun 19 16:24:40 CST 2013

使用 dshbak 之后可读性变得好了很多

$ pdsh -g dsh-test -l root 'date' | dshbak -c
----------------
192.168.0.[231-232,234]
----------------
Wed Jun 19 16:24:18 CST 2013
----------------
192.168.0.233
----------------
Wed Jun 19 16:24:19 CST 2013

2.3、参考文档

anzhihe安志合个人博客,版权所有丨 如未注明,均为原创 丨转载请注明转自:https://chegva.com/2450.html | ☆★★每天进步一点点,加油!★★☆

您可能还感兴趣的文章!

发表评论

电子邮件地址不会被公开。 必填项已用*标注