zoukankan      html  css  js  c++  java
  • pssh批量管理

    因为公司金融项目正式上线,有等保的要求,所有的线上服务器对操作过历史命令都要记录下来,需要修改一部分的配制文件。总共有300多台Linux服务器,总不能一台一台去改吧。首先想到是ansble,saltstack这两个批量管理的,但是想了想,saltstack不会,ansble好像是好像是被管理端还要安装客户端的,又不经常使用(线上的环境),弄好了还要编排剧本,语法都忘记了。有没有更轻量一点的工具呢?以前在书上了解到pssh这个工具好像挺不错的,但是也没有使用,先试试在说。

    pssh是python写的可以并发在多台机器上批量执行命令的工具,它的用法可以媲美ansible的一些简单用法,执行起来速度比ansible快它支持文件并行复制,远程命令执行,杀掉远程主机上的进程等等。杀手锏是文件并行复制,当进行再远程主机批量上传下载的时候,最好使用它。
    Pssh是用python写的轻量的批量管理工具。有两种安装方式,一种yum安装,一种编译安装。

    第一步 安装
    我采用是yum安装,yum安装需要epel源。

    yum install pssh

    使用yum安装后,只能使用pssh,但是编译安装后会包括其他命令也安装了(实测yum安装这些命令都是有的)
    pssh:在远程多台主机上并行运行命令
    pscp :把文件并行复制到多台远程主机上
    prsync:使用rsync协议本地文件同步到远程多台主机上。
    pnuke:在远程多台主机上并行killall某一进程
    pslurp:把文件从远程多台主机上复制到本地主机上
    第二步 ssh单项免秘钥登录
    找一台测试服务器,能够ping通所有的被管理的机器,然后做ssh单项的免秘钥登录,这免秘钥登录是批量管理软件都需要做的事情。这是使用一个免密码交互的脚本来实现。
    需要安装sshpass命令(这是一个ssh免交互写入密码的命令)

    yum install –y sshpass

    脚本

    #!/bin/bash
    for ip in seq {12..30}
    do
    sshpass –p”password” ssh-copy-id -i /root/.ssh/id_rsa.pub "-o StrictHostKeyChecking=no" 10.8.25.$ip
    done

    关于pssh命令执行的参数
    -h HOST_FILE 后边跟远程主机列表(ip)
    -H HOST_STRING 后边跟远程主机名或者ip地址
    -l USER 指定远程主机的用户名
    -p PAR 指定pssh最大的并行线程数。
    -o 将输出的内容重定向到一个指定的文件中
    -O 指定ssh参数的具体配置
    -e 将执行错误重定向到一个指定的文件中
    -t 设定命令执行超时时间
    -x 传递ssh命令的一些参数
    -i 在远程主机上执行命令完成后显示标准输出和标准错误
    -P 在执行远程命令时,输出执行结果
    具体怎么使用查看man帮助,有他的详细介绍
    第三部 把脚本传到对应的被管理端的服务器上面去

    pscp.pssh -h ip.txt test.sh /tmp/dengbao.sh

    ip.txt 存放的是被管理的IP
    file.txt 是dengbao.sh调用的文件
    dengbao.sh是在服务器上修改和添加内容的脚本,用来执行等保要求的。
    文件内容
    ip.txt

    10.8.27.112
    10.8.27.113
    10.8.27.114
    10.8.27.115
    10.8.27.116 。。。

    dengbao.sh

    export PROMPT_COMMAND='{ thisHistID=`history 1|awk "{print \$1}"`;lastCommand=`history 1| awk "{\$1="" ;print}"`;user=`id -un`;whoStr=(`who -u am i`);
    realUser=${whoStr[0]};logMonth=${whoStr[2]};
    logDay=${whoStr[3]};
    logTime=${whoStr[4]};pid=${whoStr[6]};
    ip=${whoStr[7]};if [ ${thisHistID}x != ${lastHistID}x ];
    then echo -E `date "+%Y/%m/%d %H:%M:%S"` $user($realUser)@$ip[PID:$pid][LOGIN:$logMonth $logDay $logTime] --- $lastCommand ;lastHistID=$thisHistID;fi; } >> $HISTORY_FILE'

    第三部 批量执行脚本

    pssh -h ip.txt bash /tmp/dengbao.sh

    如果出现绿色success的标志,表示成功了。
    第四部 ssh登录到服务器,检查一台服务器的执行情况,一台执行成功则全部执行成功。

    附加:我也是在网上早其他命令的用法
    pnuke杀掉某一进程
    这个命令类似killall命令

    pnuke -h iplist.txt httpd

    上边的意思是在远程主机上批量关闭httpd服务
    能通过killall关闭的服务,都可以通过pnuke来批量完成
    pslurp 远程主机拷贝文件到本地主机

    pslurp -h iplist.txt -L /home/ /hose/wenjian/yuanc.conf open.conf

    上边命令的意思是将所有远程主机/hose/wenjian/yuanc.conf复制到本地主机/home/目录下,并且重新命名为open.conf

    -L   来指定本地文件路径

    下面这个是拷贝目录

    pslurp -h iplist.txt -r -L /home/ /hose/wenjian/ open


    ps:建议分发文件,执行命令,批量杀死进程,使用pssh,pscp,pnuke,速度很快的

  • 相关阅读:
    spring-boot快速搭建解析
    springmvc处理ajax跨域
    Spring-AOP解析
    springmvc注解
    springmvc源码分析
    Spring源码分析
    JAVA性能优化
    数据取舍
    命令行控制
    Junit常用操作
  • 原文地址:https://www.cnblogs.com/lqhhome/p/9353375.html
Copyright © 2011-2022 走看看