zoukankan      html  css  js  c++  java
  • 轻量级自动化工具 pssh

    pssh应用场景

    pssh是一个用python编写的可以并发在多台服务器上批量执行命令的工具,它支持文件并行复制,远程并行执行命令,其中文件并行复制是pssh的核心功能,也是同类工具中的一个亮点。
    要使用pssh工具,其前提是要保证本地主机和要管理的主机之间的单向信任,也就是说要在本地主机和远程所有服务器进行秘钥认证。

    pssh安装与使用

    pssh要求python的版本大于2.4即可,可以使用yum安装pssh

    [root@yufu ~]# yum install pssh -y
    

    pssh用法:

    -h 执行命令的远程主机列表文件;文件格式:[user@]host[:port],或只写ip地址,其他省略。每行一条记录
    -H user@ip:port 文件内容格式[user@]host[:port] 
    -l 远程机器的用户名 
    -p 指定pssh最大并行线程数,例如: pssh -p 10
    -e 执行错误重定向到一个文件 
    -t 设置命令执行的超时时间 
    -A 提示输入密码并且把密码传递给ssh(注意这个参数添加后只是提示作用,随便输入或者不输入直接回车都可以) 
    -O 设置ssh参数的具体配置,参照ssh_config配置文件 
    -x 传递多个SSH 命令,多个命令用空格分开,用引号括起来 
    -X 同-x 但是一次只能传递一个命令 
    -i 显示标准输出和标准错误在每台host执行完毕后 
    -I 读取每个输入命令,并传递给ssh进程 允许命令脚本传送到标准输入
    

    应用实例

    本机:192.168.214.187
    管理主机:

    [root@yufu opt]# cat ip.txt   
    192.168.214.128
    192.168.214.134
    192.168.214.136
    #列表文件内的信息格式是“ip”格式,没有使用[user@]host[:port],
    如果本机和远程机器使用的ssh端口一致,则可以省去端口,直接用ip就行。不过建议还是将端口都带上为好。
    

    注意事项

    列表文件内的机器必须提前和本机做好ssh信任关系,如果没有做的话,那么pssh批量执行时,轮到这台没有做信任关系的机器时就不会执行。

    对上面的管理机器推送秘钥文件
    这里使用自动推送的脚本来进行秘钥的分发,这个方式适合向多台服务器推送秘钥时使用,省去了远程复制时的确认操作,从而实现自动分发秘钥,脚本如下:

    #!/bin/bash
    
    path=/root/.ssh
    [ -d ${keypath} ] || mkdir -p ${keypath}
    rpm -q expect &> /dev/null || yum install expect -y
    ssh-keygen -t rsa -f /root/.ssh/id_rsa  -P ""
    password=123456
    while read ip;do
    expect <<EOF
    set timeout 5
    spawn ssh-copy-id $ip
    expect {
    "yes/no" { send "yes
    ";exp_continue }
    "password" { send "$password
    "  }
    }
    expect eof
    EOF
    done < /opt/ip.txt
    

    执行脚本

    [root@yufu script]# ./autokey.sh
    #随机挑一台主机测试
    [root@yufu script]# ssh 192.168.214.134 'hostname'
    localhost.localdomain
    [root@yufu script]# 
    

    利用pssh查看所有远程主机时间是否同步: -i :将远程执行的命令结果输出到当前屏幕

    [root@yufu opt]# pssh -h /opt/ip.txt -i "date"
    [1] 05:52:32 [SUCCESS] 192.168.214.134
    2018年 05月 19日 星期六 17:10:22 CST
    [2] 05:52:32 [SUCCESS] 192.168.214.128
    2018年 05月 19日 星期六 17:10:32 CST
    [3] 05:52:34 [SUCCESS] 192.168.214.136
    2018年 05月 19日 星期六 08:17:12 CST
    

    备份远程主机的/etc目录到/opt ;由于/etc目录文件很多,如果单线程执行备份可能很慢,这时可以使用 -p 选项指定并行线程数量

    [root@yufu opt]# pssh -h /opt/ip.txt -l root -p 10  -i "cp -ar /etc /opt/"
    [1] 06:02:38 [SUCCESS] 192.168.214.128
    [2] 06:02:38 [SUCCESS] 192.168.214.134
    [3] 06:02:38 [SUCCESS] 192.168.214.136
    

    关闭远程主机selinux

    [root@yufu opt]# pssh -h /opt/ip.txt -l root -p 10  -i "sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config"
    [1] 06:11:26 [SUCCESS] 192.168.214.128
    [2] 06:11:27 [SUCCESS] 192.168.214.136
    [3] 06:11:27 [SUCCESS] 192.168.214.134
    

    pscp和psurp批量复制文件

    pscp命令主要作用是将本地文件并行地复制到远程多台主机上,而psurp是把远程主机上的文件复制到本机上来,这两个命令作用刚好相反pscp相当于是pssh的子命令,使用时要以 pscp.pssh 执行,pslurp可以直接执行
    应用示列:将本机上的/opt/num.sh复制到远程各主机上的/opt/yufu/目录下
    批量创建相同目录

    [root@yufu opt]# pssh -h /opt/ip.txt -l root -i "mkdir -p /opt/yufu"
    [1] 07:59:00 [SUCCESS] 192.168.214.128
    [2] 07:59:02 [SUCCESS] 192.168.214.136
    [3] 07:59:10 [SUCCESS] 192.168.214.134
    

    复制文件

    [root@yufu opt]# pscp.pssh -h /opt/ip.txt -l root -p 3  /opt/num.sh /opt/yufu/
    [1] 08:02:32 [SUCCESS] 192.168.214.128
    [2] 08:02:32 [SUCCESS] 192.168.214.136
    [3] 08:02:34 [SUCCESS] 192.168.214.134
    

    随机查看一台复制情况

    [root@yufu opt]# ssh 192.168.214.136 "ls /opt/yufu/"
    num.sh
    

    复制目录: -r : 递归

    root@yufu opt]# pscp.pssh -h /opt/ip.txt -l root -p 10 -r ./app/ /opt/yufu
    [1] 08:13:18 [SUCCESS] 192.168.214.134
    [2] 08:13:18 [SUCCESS] 192.168.214.136
    [3] 08:13:20 [SUCCESS] 192.168.214.128
    

    pslurp:将远程主机文件或目录复制到本机
    使用pslurp复制远程主机文件到本地需要指定本地的存放路径,需要用到 : -L 参数,复制目录加:-r 参数
    -L :指令本地路径,从远程主机复制文件保存到的本地路径
    使用方式:(本地路径在前,远程复制路径在后,文件新名称在最后必须要定义)

    pslurp -h/-H -L 本地路径  远程路径  文件目录重命名
    

    应用示列
    将远程主机的message日志复制到本地/opt/log下,从远程复制文件或目录到本地来必须重命名,否则执行会出错。

    [root@yufu opt]# pslurp -h /opt/ip.txt -l root -L /opt/log/ /var/log/messages messages
    [1] 08:42:00 [SUCCESS] 192.168.214.128
    [2] 08:42:00 [SUCCESS] 192.168.214.134
    [3] 08:42:00 [SUCCESS] 192.168.214.136
    

    复制到本地不用担心文件何重名问题,因为它会对应每台主机创建一个目录,把各自的文件放在各自的目录中,避免同名冲突

    [root@yufu log]# ls
    192.168.214.128  192.168.214.134  192.168.214.136
    [root@yufu log]# cd 192.168.214.134/
    [root@yufu 192.168.214.134]# ls
    messages
    

    同样,从远程主机复制目录也一样,加上 -r 选项进行递归即可,-r选项与-L 选项顺序不能颠倒,

    [root@yufu opt]# pslurp -h /opt/ip.txt -r -L /opt/home/ /home/ home
    [1] 08:47:44 [SUCCESS] 192.168.214.134
    [2] 08:47:44 [SUCCESS] 192.168.214.128
    [3] 08:47:44 [SUCCESS] 192.168.214.136
    

    思路:
    通过pssh的批量操作功能结合pscp.pssh指令,可以实现日常的文件分发,脚本批量执行的工作,这样结合起来工作,基本能够实现简单工作的自动化

  • 相关阅读:
    P1106 删数问题 / U83355 删数问题【升级版】
    P1955 [NOI2015] 程序自动分析
    P4447 [AHOI2018初中组]分组
    P1308 [NOIP2011 普及组] 统计单词数
    Django | 页面数据的缓存与使用
    Python 虚拟环境 | Mac/Linux下如何避坑安装配置Virtualenv
    python虚拟环境 | virtualenv 的简单使用 (图文)
    机器学习 | 浅谈K-近邻算法
    特征缩放 | 归一化和标准化 (下)
    简析方差、标准差与数值离散程度
  • 原文地址:https://www.cnblogs.com/anay/p/9061513.html
Copyright © 2011-2022 走看看