加载中...
PSSH
发表于:2021-07-16 | 分类: 自动化
字数统计: 9.2k | 阅读时长: 8 mins.分钟 | 阅读量:

批量管理服务器PSSH

简介

PSSH提供OpenSSH和相关工具的并行版本。包括pssh,pscp,prsync,pnuke和pslurp。该项目包括psshlib,可以在自定义应用程序中使用。 pssh是python编写,可以并发在多台机器上批量执行命令的工具,用法可以媲美ansible的一些简单用法,执行起来速度比ansible快,支持文件并行复制,远程命令。

安装

安装之前首先获取epel源

# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
# yum repolist

安装pssh

# yum -y install pssh

功能:

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

使用方法

PSSH示例及验证:

pssh -h hosts.txt -l irb2 -o /tmp/foo uptime
pssh -h hosts.txt "hostnamectl"   hosts 主机IP

选项解释:

--version     版本显示程序的版本号和退出
--help        显示帮助信息          
-h HOST_FILE, 主机文件列表 格式[user@]host[:port]
-l USER       用户名 (OPTIONAL)
-p PAR,--par = PAR并行线程的最大数量(可选)
-o OUTDIR, --outdir = OUTDIR 标准输出文件的输出目录(可选)
-e ERRDIR, --errdir = ERRDIR  stderr文件的输出目录(可选)
-t TIMEOUT,--timeout =超时  每个主机的超时时间(秒)(0 =无超时)(可选)
-O OPTION, --option = OPTION   SSH选项(可选)
-v,--verbose  打开警告和诊断消息(可选)
-A,-askpass   要求输入密码(可选)
-x ARGS,--extra-args = ARGS 额外的命令行参数,处理空格,引号和反斜杠
-X ARG, --extra-arg = ARG  额外的命令行参数
-i,--inline  每个服务器的内联内联聚合输出和错误
--inline-stdout 每个服务器的内联标准输出
-I,--send-input 从标准输入读取并作为输入发送到ssh
-P,--print 打印输出

实验:

1.在控制端主机上建立一个主机文件hosts.txt

# cat hosts.txt
172.16.127.161
172.16.127.131

2.实现远程控制获取被控主机IP地址

# pssh -h hosts.txt  -i 'ip addr show| grep ens33'

如果没有报错的话,应该输出类似实验下面的

[1] 22:42:03 [SUCCESS] 172.16.127.131
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    inet 172.16.127.131/24 brd 172.16.127.255 scope global noprefixroute dynamic ens33
[2] 22:42:03 [SUCCESS] 172.16.127.161
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    inet 172.16.127.161/24 brd 172.16.127.255 scope global noprefixroute dynamic ens33

如果有以下错误

[1] 22:40:24 [FAILURE] 172.16.127.131 Exited with error code 255
Stderr: The authenticity of host '172.16.127.131 (172.16.127.131)' can't be established.
ECDSA key fingerprint is SHA256:TikjI/UUYTvpaoAt/CsGWH5Tjj/tlSRIMUFHwjydpBY.
ECDSA key fingerprint is MD5:03:f9:94:2d:8b:a7:16:1b:a4:91:e4:9b:d6:1b:0d:4d.
Are you sure you want to continue connecting (yes/no)?
Host key verification failed.

原因是因为不能远程连接被控主机上,所以我们需要做免密认证,

# ssh-keygen  创建私钥和公钥
# ssh-copy-id 把公钥copy给每台被控主机
pscp 示例及验证:

作用:

  • 把文件并行复制到多个主机上

实验:

1.创建一个测试文件text.txt

# echo "nihao" > text.txt

2.远程将主机文件复制到被控端主机上

# pscp.pssh -h hosts.txt text.txt /opt/text.txt
[1] 23:02:17 [SUCCESS] 172.16.127.161
[2] 23:02:18 [SUCCESS] 172.16.127.131

prsync 示例:


作用:

  • 通过rsync协议协议将文件或目录从本地主机同步到远程多个主机上

pnuke 示例及验证:


作用:

  • 并行地在多个远程主机上杀死进程

实验

杀死进程

  • 安装Apache
# pssh -h hosts.txt -i "yum -y install httpd"
  • 开启Apache web服务
# pssh -h hosts.txt -i "systemctl start httpd"
[1] 00:32:33 [SUCCESS] 172.16.127.131
[2] 00:32:33 [SUCCESS] 172.16.127.161
  • 查看进程(验证)
# pssh -h hosts.txt -i "lsof -i:80"
[1] 00:36:46 [SUCCESS] 172.16.127.161
COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
httpd   11710   root    4u  IPv6  37706      0t0  TCP *:http (LISTEN)
httpd   11711 apache    4u  IPv6  37706      0t0  TCP *:http (LISTEN)
httpd   11712 apache    4u  IPv6  37706      0t0  TCP *:http (LISTEN)
httpd   11713 apache    4u  IPv6  37706      0t0  TCP *:http (LISTEN)
httpd   11714 apache    4u  IPv6  37706      0t0  TCP *:http (LISTEN)
httpd   11715 apache    4u  IPv6  37706      0t0  TCP *:http (LISTEN)
[2] 00:36:46 [SUCCESS] 172.16.127.131
COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
httpd   9307   root    4u  IPv6  34309      0t0  TCP *:http (LISTEN)
httpd   9308 apache    4u  IPv6  34309      0t0  TCP *:http (LISTEN)
httpd   9309 apache    4u  IPv6  34309      0t0  TCP *:http (LISTEN)
httpd   9310 apache    4u  IPv6  34309      0t0  TCP *:http (LISTEN)
httpd   9312 apache    4u  IPv6  34309      0t0  TCP *:http (LISTEN)
httpd   9313 apache    4u  IPv6  34309      0t0  TCP *:http (LISTEN)
  • 杀死进程
# pnuke -h hosts.txt httpd
[1] 00:38:39 [SUCCESS] 172.16.127.131
[2] 00:38:39 [SUCCESS] 172.16.127.161
  • 查看进程(验证)
# pssh -h hosts.txt -i "lsof -i:80"
[1] 00:39:55 [FAILURE] 172.16.127.161 Exited with error code 1
[2] 00:39:55 [FAILURE] 172.16.127.131 Exited with error code 1

三台 关闭firewalld

上一篇:
Apache
本文目录
本文目录