一、简单介绍

1、pssh全称是parallel-ssh,基于Python编写的并发在多台服务器上批量执行命令的工具。包括pssh,pscp,prsync,pnuke和pslurp。该项目包括psshlib,可以在自定义应用程序中使用。它相当于ansible的简化版,执行起来速度比ansible快,支持文件并行复制,远程命令执行,杀掉远程主机上的进程,杀手锏是文件并行复制

2、相关参数
  -h –hosts 主机文件列表,内容格式”[user@]host[:port]”
  -H –host 单台主机,内容格式”[user@]host[:port]”
  -l –user 登录使用的用户名
  -p –par 并发的线程数【可选】
  -o –outdir 输出的文件目录【可选】
  -e –errdir 错误输入文件【可选】
  -t –timeout TIMEOUT 超时时间设置,0无限制【可选】
  -O  –option SSH的选项
  -v –verbose 详细模式
  -A –askpass 手动输入密码模式
  -x –extra-args 额外的命令行参数使用空白符号,引号,反斜线处理
  -X –extra-arg 额外的命令行参数,单个参数模式,同-x
  -i –inline 每个服务器内部处理信息输出
  –inline-stdout 每个服务器的内服输出
  -P, –print 打印出服务器返回信息

3、主要用法:
  1.pssh命令    在远程主机上执行本地命令或者脚本
  2.pscp命令    将本地文件拷贝至多个远端主机
  3.pslurp命令  从多台远程机器拷贝文件到本地
  4.pnuke命令  并行在远端主机杀进程
  5.prsync命令  使用rsync协议从本地计算机同步到远程主机

二、环境

1、[root@localhost ~]# vim ip.txt   (创建要登录的ip文本)

129.168.40.132(pssh机)  192.168.40.220

192.168.40.155                192.168.40.211

2、免密登录脚本

[root@localhost ~]# vim ssh_key.sh

#!/bin/bash
rpm -q expect &> /dev/null || yum install expect -y
ssh-keygen -p "" -f "/root/.ssh/id_rsa"
password=xxxxx  (四台机子密码一样)
while read ipaddr;do
expect <<EOF
set timeout 10
spawn ssh-copy-id $ipaddr
expect {
"yes/no"  { send "yes\";exp_continue }
"password" { send "$password\n" }
}
expect eof
EOF
done < ip.txt

另一个版本:

[ ! -f /root/.ssh/id_rsa.pub ] && ssh-keygen -t rsa -p '' &>/dev/null  # 密钥对不存在则创建密钥

while read line;do

        ip=`echo $line | cut -d " " -f1`           # 提取文件中的ip
        user_name=`echo $line | cut -d " " -f2`      # 提取文件中的用户名
        pass_word=`echo $line | cut -d " " -f3`      # 提取文件中的密码
expect <<EOF
        spawn ssh-copy-id -i /root/.ssh/id_rsa.pub $user_name@$ip   # 复制公钥到目标主机
        expect {
                "yes/no" { send "yes\n";exp_continue}     # expect 实现自动输入密码
                "password" { send "$pass_word\n"}
             }
        expect eof
EOF
done /root/host_ip.txt      # 读取存储ip的文件
pscp.pssh -h /root/host_ip.txt /root/your_scripts.sh /root     # 推送你在目标主机进行的部署配置
pssh -h /root/host_ip.txt -i bash /root/your_scripts.sh        # 进行远程配置,执行你的配置脚本

host_ip.txt文件可以通过手动写(当然了这就显得不自动化)你可以使用扫描工具扫描你网络中的主机,然后配合awk等工具生成该文件。ip地址即登录用户名密码的文件实例:

[root@vinsent app]# cat host_ip.txt
172.18.14.123 root 123456
172.18.254.54 root 123456
推荐:https://www.cnblogs.com/30go/p/11458457.html

3、互相能通信上网

三、示例

1、第一次没有登录时(没有做免密操作,需要# ssh 192.168.40.155登录,输入一次yes)

[root@localhost ~]# pssh -H "192.168.40.220 192.168.40.155" -A  -i  hostname
Warning: do not enter your password if anyone else has superuser
privileges or access to your account.
Password:
[1] 09:04:44 [SUCCESS] 192.168.40.155
php2
[2] 09:04:44 [SUCCESS] 192.168.40.220
zjz

2、免密登录后,批量创建用户

[root@localhost ~]# pssh  -h   ip.txt   -i  'useradd pssher'
[1] 09:23:06 [SUCCESS] 192.168.40.155
[2] 09:23:07 [SUCCESS] 192.168.40.211
[3] 09:23:07 [SUCCESS] 192.168.40.220
[4] 09:23:07 [SUCCESS] 192.168.40.132

[root@localhost ~]# pssh   -h  ip.txt   -i  'getent  passwd  pssher'  (验证创建用户是否成功)

3、指定输出信息存放文件夹(此文件夹不需要提前创建)

[root@localhost ~]# pssh  -h  ip.txt  -o  /data/    'cat /etc/fstab'
[1] 09:40:56 [SUCCESS] 192.168.40.132
[2] 09:40:56 [SUCCESS] 192.168.40.220
[3] 09:40:56 [SUCCESS] 192.168.40.155
[4] 09:40:56 [SUCCESS] 192.168.40.211
[root@localhost ~]# cd /data
[root@localhost data]# ls
192.168.40.132  192.168.40.155  192.168.40.211  192.168.40.220

4、关闭selinux

[root@localhost ~]# pssh -h ip.txt  'sed -i "s/^SELINUX=.*/SELINUX=disabled/"  /etc/selinux/config'
[1] 10:00:18 [SUCCESS] 192.168.40.220
[2] 10:00:18 [SUCCESS] 192.168.40.155
[3] 10:00:18 [SUCCESS] 192.168.40.211
[4] 10:00:18 [SUCCESS] 192.168.40.132
[root@localhost ~]# cat /etc/selinux/config  (查看结果,不用getenforce,刷新太慢)

5、pscp.pssh远程推送

[root@localhost ~]# pssh -h ip.txt  'mkdir /data'
[1] 10:13:39 [SUCCESS] 192.168.40.220
[2] 10:13:39 [SUCCESS] 192.168.40.155
[3] 10:13:39 [SUCCESS] 192.168.40.211
[4] 10:13:39 [SUCCESS] 192.168.40.132
[root@localhost ~]# pscp.pssh -h ip.txt /root/zj.sh  /data/
[1] 10:13:52 [SUCCESS] 192.168.40.220
[2] 10:13:52 [SUCCESS] 192.168.40.155
[3] 10:13:52 [SUCCESS] 192.168.40.211
[4] 10:13:52 [SUCCESS] 192.168.40.132
[root@localhost ~]# pssh -h ip.txt  'bash /data/zj.sh'
[1] 10:14:25 [SUCCESS] 192.168.40.220
[2] 10:14:25 [SUCCESS] 192.168.40.155
[3] 10:14:25 [SUCCESS] 192.168.40.211
[4] 10:14:25 [SUCCESS] 192.168.40.132
[root@localhost ~]# pssh -h ip.txt -i 'bash /data/zj.sh'
[1] 10:14:31 [SUCCESS] 192.168.40.220
zjz
[2] 10:14:31 [SUCCESS] 192.168.40.211
localhost.localdomain
[3] 10:14:31 [SUCCESS] 192.168.40.155
php2
[4] 10:14:31 [SUCCESS] 192.168.40.132
localhost.localdomain

6、pslurp远程下载(拉取)

[root@localhost ~]# pslurp -h ip.txt   -L /a    /var/log/messages   messages (-L指定文件夹,最后跟上自定义名,如messages)
[1] 10:19:25 [SUCCESS] 192.168.40.155
[2] 10:19:25 [SUCCESS] 192.168.40.211
[3] 10:19:25 [SUCCESS] 192.168.40.220
[4] 10:19:25 [SUCCESS] 192.168.40.132
[root@localhost ~]# ls /a
192.168.40.132  192.168.40.155  192.168.40.211  192.168.40.220
[root@localhost ~]# tree /a/
/a/
├── 192.168.40.132
│   └── messages
├── 192.168.40.155
│   └── messages
├── 192.168.40.211
│   └── messages
└── 192.168.40.220
    └── messages
[root@localhost ~]# pslurp -h ip.txt  -L /aa -r  /var/log  m  (-r 递归下载)

7、pnuke 并行在远程主机杀进程

[root@localhost ~]# pnuke   -h   ip.txt   httpd
[1] 11:18:04 [SUCCESS] 192.168.40.211
[2] 11:18:04 [SUCCESS] 192.168.40.155
[3] 11:18:04 [SUCCESS] 192.168.40.220
[4] 11:18:05 [SUCCESS] 192.168.40.132

8、prsync    -r递归将/home传到各主机 /tmp/pssh/目录下

[root@localhost ~]# prsync  -h ip.txt -r /home /tmp/pssh/
[1] 11:24:26 [SUCCESS] 192.168.40.132
[2] 11:24:26 [SUCCESS] 192.168.40.220
[3] 11:24:26 [SUCCESS] 192.168.40.155
[4] 11:24:26 [SUCCESS] 192.168.40.211
四、rsync工具

-v:显示rsync过程中详细信息。

-P:显示文件传输的进度信息。

-n :模拟复制过程。

-a :归档模式,表示递归传输并保持文件属性。等同于"-rtopgDl"。

-t :保持mtime属性。建议任何时候都加上"-t",否则目标文件mtime会设置为系统时间,导致下次更新 :检查出mtime不同从而导致增量传输无效。

-o :保持owner属性(属主)。

-g --group:保持group属性(属组)。

-p --perms:保持perms属性(权限,不包括特殊权限)。

-D :是"--device --specials"选项的组合,即也拷贝设备文件和特殊文件。

-l --links:如果文件是软链接文件,则拷贝软链接本身而非软链接所指向的对象。

-z :传输时进行压缩提高效率。

-R :使用相对路径。

-u  :仅在源mtime比目标已存在文件的mtime新时才拷贝。注意,该选项是接收端判断的,不会影响删除行为。

-d  :以不递归的方式拷贝目录本身。

-e :指定所要使用的远程shell程序,默认为ssh。

-W :rsync将不再使用增量传输,而是全量传输。

rsync做远程传输时比scp更高效,rsync基于增量传输,更快,效率更高。

[root@zjz ~]# rsync -av /root/zjz/*  192.168.40.211:/root/cui/
root@192.168.40.211's password:
sending incremental file list
f1   (/root/zjz/有f1,f2,f3,三个文件,f1被发送是因为只有f1发生改变)
sent 133907 bytes  received 189185 bytes  15027.53 bytes/sec
total size is 2826960896  speedup is 8749.71

小型自动化运维工具pssh和传输工具rsync的更多相关文章

  1. 自动化运维之PSSH

    1.PSSH简介 PSSH提供OpenSSH和相关工具的并行版本.包括pssh,pscp,prsync,pnuke和pslurp.该项目包括psshlib,可以在自定义应用程序中使用. pssh是py ...

  2. CheungSSH国产自动化运维工具开源Web界面

    CheungSSH web2.0 发布文档 CheungSSH 简介 CheungSSH是一款国人自主研发的Linux运维自动化管理服务器软件,秉着为企业降低运营成本,解放管理员双手和自动化生产的理念 ...

  3. 自动化运维工具——ansible详解(一)

    ansible 简介 ansible 是什么? ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.chef.func.fabric)的优点,实现了批量系统 ...

  4. 企业级自动化运维工具应用实战-ansible

    背景 公司计划在年底做一次大型市场促销活动,全面冲刺下交易额,为明年的上市做准备.公司要求各业务组对年底大促做准备,运维部要求所有业务容量进行三倍的扩容,并搭建出多套环境可以共开发和测试人员做测试,运 ...

  5. 项目实战10.1—企业级自动化运维工具应用实战-ansible

    实战环境: 公司计划在年底做一次大型市场促销活动,全面冲刺下交易额,为明年的上市做准备.公司要求各业务组对年底大促做准备,运维部要求所有业务容量进行三倍的扩容,并搭建出多套环境可以共开发和测试人员做测 ...

  6. CentOS7Linux中自动化运维工具Ansible的安装,以及通过模块批量管理多台主机

    使用自动化运维工具Ansible集中化管理服务器 Ansible概述 Ansible是一款为类Unix系统开发的自由开源的配置和自动化工具.它用Python写成,类似于saltstack和Puppet ...

  7. 自动化运维工具——ansile详解

    自动化运维工具——ansible详解(一) 目录 ansible 简介 ansible 是什么? ansible 特点 ansible 架构图 ansible 任务执行 ansible 任务执行模式 ...

  8. 自动化运维工具 SaltStack 搭建

    原文地址:https://www.ibm.com/developerworks/cn/opensource/os-devops-saltstack-in-cloud/index.html#N10072 ...

  9. 企业级自动化运维工具应用实战ansible

    公司计划在年底做一次大型市场促销活动,全面冲刺下交易额,为明年的上市做准备.公司要求各业务组对年底大促做准备,运维部要求所有业务容量进行三倍的扩容,并搭建出多套环境可以共开发和测试人员做测试,运维老大 ...

随机推荐

  1. 【The 13th Chinese Northeast Collegiate Programming Contest E题】

    题目大意:给定一棵 N 个点的树,边有边权,定义"线树"为一个图,其中图的顶点是原树中的边,原树中两条有公共端点的边对应在线图中存在一条边,边权为树中两条边的边权和,求线图的最小生 ...

  2. k8spod控制器概述

    自主式pod对象由调度器绑定至目标工作节点后即由相应节点上的kubelet负责监控其容器的存活性,容器主进程崩溃后,kubelet能够自动重启相应的容器.不过,kubelet对非主进程崩溃类的容器错误 ...

  3. 网络编程简介(OSI七层协议,TCP协议原理,三次握手与四次挥手)

    目录 网络编程 软件开发架构 C/S架构 B/S架构 网络编程的发展史 互联网协议 1.物理连接层 2.数据链路层 3.网络层 4.传输层 5.应用层 三次握手四次挥手 三次握手建链接 数据传输 四次 ...

  4. 字符串类QString

    采用Unicode编码,所以一个QChar占用两个字节使用隐式共享技术来节省内存和减少不必要的数据拷贝跨平台使用,不用考虑字符串的平台兼容性QString直接支持字符串和数字之间的相互转换QStrin ...

  5. 【SQL-不重复插入】一条语句实现,插入不重复的记录到数据库

    Insert新纪录时,先查询SQL数据库中是否存在相同记录,如果存在,则不插入.  if not exists(select count(*) from [Admin] where Name='adm ...

  6. VM删除快照失败,磁盘空间不足,只是删除了快照名字(全网唯一解决办法)

    原创: 删除之前的快照,发现只是把名字删除了, 看着这么多文件也不知道怎么删,一顿百度google也是没找到答案 于是就自己琢磨 因为删除快照的时候,是先把快照删除,然后删除无效的文件 所以先让这个盘 ...

  7. 冒泡排序和选择排序(bubble sort and selection sort)

    Bubble sort Basic Method: import random nums = [random.randint(1,20) for _ in range(10)] #制作一个无序数字列表 ...

  8. ThreadPool用法与优势

    1.  线程池的优点: 合理利用线程池能够带来三个好处.第一:降低资源消耗.通过重复利用已创建的线程降低线程创建和销毁造成的消耗.第二:提高响应速度.当任务到达时,任务可以不需要等到线程创建就能立即执 ...

  9. Linux Bash shell常用操作快捷键

    转自:https://linuxtoy.org/archives/bash-shortcuts.html 生活在 Bash shell 中,熟记以下快捷键,将极大的提高你的命令行操作效率. 编辑命令 ...

  10. Springboot2.x使用redis作为缓存

    一.Springboot2.x关于配置redis作为缓存. 基本配置如下: (1)在application.properties文件中 spring.redis.database=2 //第几个数据库 ...