• 批量执行工具PSSH详解


    批量执行工具PSSH详解

    pssh是一个python编写可以在多台服务器上执行命令的工具,同时支持拷贝文件,是同类工具中很出色的,使用必须在各个服务器上配置好密钥认证访问。

    安装pssh包

    yum 安装:

    yum install pssh -y
    

    编译安装:

    # 安装setuptools包,如果安装了跳过
    wget http://pypi.python.org/packages/source/s/setuptools/setuptools-0.6c11.tar.gz --no-check-certificate
    tar -xf setuptools-0.6c11.tar.gz
    cd setuptools-0.6c11
    python setup.py build
    python setup.py install
    # 安装pssh
    cd -
    wget  http://www.theether.org/pssh/pssh-1.4.3.tar.gz
    cd pssh-1.4.3/
    python setup.py install
    

    pssh包的命令介绍

    • pssh 在多个主机上并行运行命令
    • pscp 把文件并行复制到多个主机上
    • prsync 通过rsync协议把文件高效并行复制到多个主机上
    • pslurp 把文件并行地从多个远程主机复制到中心主机上
    • pnuke 并行地在多个远程主机上杀死进程

    pssh 命令

    pssh: 查询远程主机的信息

    pssh 
    Usage: pssh [OPTIONS] -h hosts.txt prog [arg0] ..
    -h --hosts 主机文件列表,格式"host[:port] [user]"
    -l --user  用户名
    -p --par 并发线程数
    -o --outdir 输出的文件目录
    -e --errdir 错误输出的文件目录
    -t --timeout 设置命令执行超时时间 -1表示无限制
    -O --options 设置ssh的一些选项
    -v --verbose 详细模式
    -P --print 打印出输出执行信息
    -i --inline 在每台host执行完毕后,显示出输出信息
    Example: pssh -h nodes.txt -l irb2 -o /tmp/pssh uptime
    
    [root@localhost ~]# cat /etc/pssh_hosts 
    web1.jiajie.com
    web2.jiajie.com
    web3.jiajie.com
    

    “-O”参数,后面跟
    的“StrictHostKeyChecking=no”是sshd服务的配置文件ssh_config
    中的一个选项,通过设置这个参数,可以让远程主机自动接受
    本地主机的hostkey。第一次执行必须指定,不然报错。

    [root@localhost ~]# pssh -i -O "StrictHostKeyChecking=no" -h /etc/pssh_hosts 'date'
    [1] 09:56:38 [SUCCESS] web1.jiajie.com 22
    2017年 10月 17日 星期二 09:56:38 CST
    [2] 09:56:38 [SUCCESS] web2.jiajie.com 22
    2017年 10月 17日 星期二 09:56:38 CST
    [3] 09:56:38 [SUCCESS] web3.jiajie.com 22
    2017年 10月 17日 星期二 09:56:37 CST
    
    [root@localhost ~]# pssh -i -h /etc/pssh_hosts 'uptime'
    [1] 09:59:50 [SUCCESS] web1.jiajie.com 22
     09:59:50 up  1:20,  1 user,  load average: 0.06, 0.01, 0.00
    [2] 09:59:50 [SUCCESS] web3.jiajie.com 22
     09:59:49 up  1:20,  2 users,  load average: 0.00, 0.01, 0.05
    [3] 09:59:50 [SUCCESS] web2.jiajie.com 22
     09:59:50 up  1:20,  1 user,  load average: 0.06, 0.02, 0.00
    
    [root@localhost ~]# pssh -i -h /etc/pssh_hosts "tar -zxvf pssh-1.4.3.tar.gz"
    
    [root@localhost ~]# pssh -i -h /etc/pssh_hosts "rpm -qa httpd|wc -l"
    [1] 10:20:18 [SUCCESS] web2.jiajie.com 22
    0
    [2] 10:20:19 [SUCCESS] web1.jiajie.com 22
    0
    [3] 10:20:19 [SUCCESS] web3.jiajie.com 22
    0
    

    pscp 命令

    pscp: 把文件或者目录并行的复制到多个主机上面

    Usage: pscp [OPTIONS] -h hosts.txt local remote
    -r 递归复制目录
    -h 主机文件列表,格式"host[:port] [user]"
    -l 用户名
    -p --par 并发线程数
    -o --outdir 输出的文件目录
    -e --errdir 错误输出的文件目录
    -t --timeout 设置命令执行超时时间 -1表示无限制
    -O --options 设置ssh的一些选项
    -v --verbose 详细模式  
    Example: pscp -h hosts.txt -l irb2 foo.txt /home/irb2/foo.txt
    
    [root@localhost ~]# pscp -h /etc/pssh_hosts /etc/hosts /tmp/
    [1] 10:29:11 [SUCCESS] web2.jiajie.com 22
    [2] 10:29:11 [SUCCESS] web1.jiajie.com 22
    [3] 10:29:11 [SUCCESS] web3.jiajie.com 22
    [root@localhost ~]# pssh -i -h /etc/pssh_hosts "ls -l /tmp/hosts"
    [1] 10:29:57 [SUCCESS] web1.jiajie.com 22
    -rw-r--r-- 1 root root 202 10月 17 10:29 /tmp/hosts
    [2] 10:29:57 [SUCCESS] web2.jiajie.com 22
    -rw-r--r-- 1 root root 202 10月 17 10:29 /tmp/hosts
    [3] 10:29:57 [SUCCESS] web3.jiajie.com 22
    -rw-r--r-- 1 root root 202 10月 17 10:29 /tmp/hosts
    
    [root@localhost ~]# pscp -r -h /etc/pssh_hosts /root/shell.sh/ /tmp/
    [1] 10:33:18 [SUCCESS] web1.jiajie.com 22
    [2] 10:33:18 [SUCCESS] web2.jiajie.com 22
    [3] 10:33:18 [SUCCESS] web3.jiajie.com 22
    

    pslurp 命令(从远程主机复制到本地。)

    Usage: pslurp [OPTIONS] -h hosts.txt -o outdir remote local
    
      -r --recursive recusively copy directories (OPTIONAL)
      -L --localdir  output directory for remote file copies
      -h --hosts     hosts file (each line "host[:port] [login]")
      -l --user      username (OPTIONAL)
      -p --par       max number of parallel threads (OPTIONAL)
      -o --outdir    output directory for stdout files (OPTIONAL)
      -e --errdir    output directory for stderr files (OPTIONAL)
      -t --timeout   timeout (secs) (-1 = no timeout) per host (OPTIONAL)
      -v --verbose   turn on warning and diagnostic messages (OPTIONAL)
      -O --options   SSH options (OPTIONAL)
    
    Example: pslurp -h hosts.txt -L /tmp/outdir -l irb2 
             /home/irb2/foo.txt foo.txt
    

    -L:指定从远程主机拷贝文件放置的目录,拷贝/root/expect.sh文件,并将其重命名为test1.
    如果拷贝目录需要使用-r参数:

    [root@localhost ~]# pslurp -h /etc/pssh_hosts -L /tmp/ /root/expect.sh test1 
    [1] 10:44:55 [FAILURE] web1.jiajie.com 22 Received error code of 1
    [2] 10:44:56 [FAILURE] web3.jiajie.com 22 Received error code of 1
    [3] 10:44:56 [SUCCESS] web2.jiajie.com 22
    [root@localhost ~]# ll /tmp/web2.jiajie.com/
    总用量 4
    -rw-r--r-- 1 root root 139 10月 17 10:44 test1
    
    [root@localhost ~]# pslurp -r -h /etc/pssh_hosts -L /tmp/ /root/shell.sh      test2
    

    prsync 命令:

    Usage: prsync [OPTIONS] -h hosts.txt local remote
    
      -r --recursive recusively copy directories (OPTIONAL)
      -a --archive   use rsync -a (archive mode) (OPTIONAL)
      -z --compress  use rsync compression (OPTIONAL)
      -h --hosts     hosts file (each line "host[:port] [login]")
      -l --user      username (OPTIONAL)
      -p --par       max number of parallel threads (OPTIONAL)
      -o --outdir    output directory for stdout files (OPTIONAL)
      -e --errdir    output directory for stderr files (OPTIONAL)
      -t --timeout   timeout (secs) (-1 = no timeout) per host (OPTIONAL)
      -v --verbose   turn on warning and diagnostic messages (OPTIONAL)
      -O --options   SSH options (OPTIONAL)
    
    Example: prsync -r -h hosts.txt -l irb2 foo /home/irb2/foo
    

    prsync的主要作用是通过rsync协议将文件或目录从本地主
    机同步到远程多个主机上。

    [root@localhost ~]# prsync -h /etc/pssh_hosts -a -r /root/shell.sh /tmp
    [1] 11:33:26 [SUCCESS] web3.jiajie.com 22
    [2] 11:33:26 [SUCCESS] web1.jiajie.com 22
    [3] 11:33:27 [SUCCESS] web2.jiajie.com 22
    

    -r:递归复制。

    -a:保持文件的属性不变

    -z:压缩文件,一般不推荐。

    pnuke 命令:

    Usage: pnuke [OPTIONS] -h hosts.txt pattern
    
      -h --hosts   hosts file (each line "host[:port] [user]")
      -l --user    username (OPTIONAL)
      -p --par     max number of parallel threads (OPTIONAL)
      -o --outdir  output directory for stdout files (OPTIONAL)
      -e --errdir  output directory for stderr files (OPTIONAL)
      -t --timeout timeout (secs) (-1 = no timeout) per host (OPTIONAL)
      -v --verbose turn on warning and diagnostic messages (OPTIONAL)
      -O --options SSH options (OPTIONAL)
    
    Example: pnuke -h hosts.txt -l irb2 java
    

    pnuke的主要作用是在远程多主机上并行杀掉某一进程,
    相当于killall命令。可以直接使用pssh 来传递killall命令,这里就不做介绍了。

  • 相关阅读:
    bzoj 2816: [ZJOI2012]网络 (LCT 建多棵树)
    bzoj 2157: 旅游 (LCT 边权)
    bzoj 3669: [Noi2014]魔法森林 (LCT)
    bzoj 2049: [Sdoi2008]Cave 洞穴勘测 (LCT)
    bzoj 2002 : [Hnoi2010]Bounce 弹飞绵羊 (LCT)
    bzoj 3282: Tree (Link Cut Tree)
    模拟赛1
    Some tricks
    模拟赛简要题解与心得
    Noip 训练指南
  • 原文地址:https://www.cnblogs.com/dianel/p/10315228.html
Copyright © 2020-2023  润新知