小型自动化运维工具pssh和传输工具rsync

一、简单介绍

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

2、相关参数
  -h –hosts 主机文件列表,内容格式”[[email protected]]host[:port]”
  -H –host 单台主机,内容格式”[[email protected]]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、[[email protected] ~]# vim ip.txt   (创建要登录的ip文本)

129.168.40.132(pssh机)  192.168.40.220

192.168.40.155                192.168.40.211

2、免密登录脚本

[[email protected] ~]# 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

3、互相能通信上网

三、示例

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

[[email protected] ~]# 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、免密登录后,批量创建用户

[[email protected] ~]# 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

[[email protected] ~]# pssh   -h  ip.txt   -i  ‘getent  passwd  pssher‘  (验证创建用户是否成功)

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

[[email protected] ~]# 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
[[email protected] ~]# cd /data
[[email protected] data]# ls
192.168.40.132  192.168.40.155  192.168.40.211  192.168.40.220

4、关闭selinux

[[email protected] ~]# 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
[[email protected] ~]# cat /etc/selinux/config  (查看结果,不用getenforce,刷新太慢)

5、pscp.pssh远程推送

[[email protected] ~]# 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
[[email protected] ~]# 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
[[email protected] ~]# 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
[[email protected] ~]# 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远程下载(拉取)

[[email protected] ~]# 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
[[email protected] ~]# ls /a
192.168.40.132  192.168.40.155  192.168.40.211  192.168.40.220
[[email protected] ~]# tree /a/
/a/
├── 192.168.40.132
│   └── messages
├── 192.168.40.155
│   └── messages
├── 192.168.40.211
│   └── messages
└── 192.168.40.220
    └── messages
[[email protected] ~]# pslurp -h ip.txt  -L /aa -r  /var/log  m  (-r 递归下载)

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

[[email protected] ~]# 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/目录下

[[email protected] ~]# 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基于增量传输,更快,效率更高。

[[email protected] ~]# rsync -av /root/zjz/*  192.168.40.211:/root/cui/
[email protected]‘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

原文地址:https://www.cnblogs.com/zjz20/p/11619566.html

时间: 2024-10-09 03:53:42

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

小型自动化运维--expect脚本之自动同步

小型自动化运维--expect脚本之自动同步 expect脚本可以运用于自动化运维多个方面,例如:可以自动到远程机器执行命令,也可以传输文件到远程机器上. 脚本如下: #!/usr/bin/expect set passwd "wtf" spawn rsync -av [email protected]:/tmp/shiyan.txt /tmp/ expect { "yes/no" { send "yes\r"} "password:&

小型自动化运维--expect脚本V2版

小型自动化运维--expect脚本V2版 在实际运维工作中,需要我们向远程主机同步数据,可以用rsync来实现.那么用expect脚本怎么实现数据传输完成之后自动退出远程主机呢?在开始expect脚本V2版之前,我们先来看下,使用expect脚本来实现远程主机的登入,脚本如下: #! /usr/bin/expect set host "192.168.8.120" set passwd "wtf" spawn ssh [email protected]$host e

小型自动化运维--expect脚本

小型自动化运维--expect脚本 expect可以让我们实现自动登录远程机器,并且可以实现自动远程执行命令.知道用户名和密码或者是使用密钥验证都可以使用,下面介绍expect 脚本实现登陆和远程命令: 安装ssh包 # yum install -y expect openssh-clients [依赖 ssh ,通信的机器都要安装 openssh-clients] 编写脚本 # vim /usr/local/sbin/1.expect #! /usr/bin/expect set host "

小型自动化运维--expect脚本之指定ip,指定文件进行同步操作(一)

小型自动化运维--expect脚本之指定ip,指定文件进行同步操作 # vim 5.expect #!/usr/bin/expect set passwd "wtf" set host [lindex $argv 0] set file [lindex $argv 1] spawn rsync -av $file [email protected]$host:$file expect { "yes/no" { send "yes\r"} &quo

小型自动化运维--expect入门知识

小型自动化运维--expect入门知识 Expect的自动交互工作流程简单说明: spawn启动指定进程-->expect获取期待的关键字-->send向指定进程发送指定字符-->进程执行完毕,退出脚本. spawn命令 如果没有spawn命令,expect程序将会无法实现自动交互. spawn命令的语法为: spawn [选项] [需要自动交互的命令或程序] 例如:spawn ssh [email protected] uptime 说明:在spawn命令的后面,直接加上要执行的命令或

小型自动化运维--expect脚本之传递函数

小型自动化运维--expect脚本之传递函数 [[email protected] ~]# vim 3.expect #!/usr/bin/expect set user [lindex $argv 0] set host [lindex $argv 1] set passwd "wtf" set cm [lindex $argv 2] spawn ssh [email protected]$host expect { "yes/no" { send "y

自动化运维利器---pssh

有的公司,机房有60台服务器,有的公司机房有3000台服务器,还有的更多!这么多的服务器,要执行相同的系统配置操作,怎么办? 答案1:   一台一台的部署,有点活活累死的感觉! 答案2:  写SHELL脚本,一回车,全部机器就都执行了.是个办法,但是效率很低,不是吗?! 答案3 :    用pssh,它是运维利器啊! pssh:   parallel-ssh ,即并行ssh,是一个用Python编写的工具,作用就是并行在多台服务器上执行命令.比如,在晚上12:00 分这个时间,同时在3000台服

linux自动化运维平台ansible部署

前言 运维的发展方向,集中化,自动化,标准化,虚拟化,分布式.本文展示的就是自动化运维的发展方向的工具:ansible.ansible有很多优点,仅需要ssh和python即可使用,不需要客户端,功能强大,模块丰富,上手容易门槛低,基于python开发,更容易做二次开发. 操作使用环境: [[email protected] ~]# cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core) 结构拓扑图 安装软件和其他准备工作 可以源

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

CheungSSH web2.0 自动化运维 CheungSSH 简介 CheungSSH是一款国人自主研发的Linux运维自动化管理服务器软件,秉着为企业降低运营成本,解放管理员双手和自动化生产的理念,创造的一套开源运维自动化系统. ChuengSSH 特点 操作简单,全程Web界面,不需要特定的语法,不需要学习运作原理,即使不懂得Linux的人也能操作,界面全中文,点击鼠标就能指挥上千台服务器有序运作功能完备,支持网络设备,Linux服器,Windows服务器,命令执行.文件传输.批量部署程