美文网首页收藏
【easyctl】使用easyctl跨主机并行执行shell

【easyctl】使用easyctl跨主机并行执行shell

作者: 微凉哇 | 来源:发表于2021-12-22 09:48 被阅读0次

背景说明

很多时候我们需要批量对主机执行shell,比如说设置内核参数。一台一台登录执行配置显然不行。

当然ansible-playbook是个不错的选择。

ansible-playbook并不太适用于离线环境(主要yum不可用场景),且对新手不太友好,需要一定的学习成本。

这个时候我们就可以使用easyctl 来实现

安装easyctl

选择任意方式安装

  • 编译安装最新版
git clone https://github.com/weiliang-ms/easyctl.git
cd easyctl
go build -ldflags "-w -s" -o /usr/local/bin/easyctl
  • 下载编译好的文件

easyctl-v0.7.16-alpha

chmod +x easyctl
mv easyctl /usr/local/bin
  • 兼容性

  • CentOS6

  • CentOS7

使用方式

  1. 生成默认配置文件
$ easyctl exec shell
INFO[0000] 生成配置文件样例, 请携带 -c 参数重新执行 -> config.yaml
  1. 修改配置文件config.yaml中主机列表配置

easyctl根据主机列表ssh远程至目标主机执行shell

server:
  #  - host: 10.79.165.[11:13]
  #    username: root
  #    password: neusoft
  #    port: 22
  #  - host: 10.79.164.[61:63]
  #    username: root
  #    password: neusoft
  #    port: 22
  - host: 10.10.10.[1:3]
    username: root
    privateKeyPath: ~/.ssh/id_rsa
    password: ""
    port: 22
excludes:
  - 192.168.235.132
script: "1.sh"
  1. 执行shell

添加--debug可以输出详细内容。

$ easyctl exec shell -c config.yaml --debug

配置项说明

  • 主机配置段:该段配置远程执行shell的主机信息,字段说明如下
    • host: 10.10.10.[1:3] 主机地址段,适用于ip连续场景。分隔符可以为[1:3]1-2[1-2]1:2
    • username: 远程主机ssh用户名称,缺省值为root
    • password: 对应username的密码
    • privateKeyPath: ssh私钥路径
    • port: ssh端口,默认22
    • excludes: 排除host地址段内的ip地址列表

privateKeyPath优先级高于password:

  1. privateKeyPath为空,取password值,ssh使用密码登录方式
  2. privateKeyPath非空,取privateKeyPath值,ssh使用密钥登录方式
server:
  #  - host: 10.79.165.[11:13]
  #    username: root
  #    password: neusoft
  #    port: 22
  #  - host: 10.79.164.[61:63]
  #    username: root
  #    password: neusoft
  #    port: 22
  - host: 10.10.10.[1:3]
    username: root
    privateKeyPath: ~/.ssh/id_rsa
    password: ""
    port: 22
excludes:
  - 192.168.235.132
  • 脚本配置:
    • script: "date": 远程执行的shell指令,适用于运行单个shell指令场景
    • script: "1.sh": 远程执行的shell脚本,适用于运行多个shell指令场景

配置样例

1.主机: 10.10.10.1-10.10.10.10执行date指令,使用密钥登录方式

server:
  - host: 10.10.10.[1:10]
    username: root
    privateKeyPath: ~/.ssh/id_rsa
    password: ""
    port: 22
excludes:
  - 192.168.235.132
script: "date"

2.主机: 10.10.10.1-10.10.10.10执行date指令,使用密码登录方式

server:
  - host: 10.10.10.[1:10]
    username: root
    # privateKeyPath: ~/.ssh/id_rsa
    password: "123456"
    port: 22
excludes:
  - 192.168.235.132
script: "date"

3.主机: 10.10.10.110.10.10.310.10.10.4执行date指令,使用密码登录方式

server:
  - host: 10.10.10.[1:4]
    username: root
    # privateKeyPath: ~/.ssh/id_rsa
    password: "123456"
    port: 22
excludes:
  - 10.10.10.2
script: "date"

4.主机: 10.10.10.110.10.10.310.10.10.4执行shell脚本,使用密码登录方式

server:
  - host: 10.10.10.[1:4]
    username: root
    # privateKeyPath: ~/.ssh/id_rsa
    password: "123456"
    port: 22
excludes:
  - 10.10.10.2
script: "/root/modify-sysctl.sh"

/root/modify-sysctl.sh脚本内容如下

#!/bin/bash
sed -i '/vm.dirty_background_ratio/d' /etc/sysctl.conf
sed -i '/vm.dirty_ratio/d' /etc/sysctl.conf
echo "vm.dirty_ratio=10" >> /etc/sysctl.conf
echo "vm.dirty_background_ratio=5" >> /etc/sysctl.conf
sysctl -p

5.主机: 10.10.10.110.10.10.310.10.10.4执行shell脚本,使用密码登录方式,且ssh端口及密码均不一致

server:
  - host: 10.10.10.1
    username: root
    # privateKeyPath: ~/.ssh/id_rsa
    password: "123456"
    port: 22
  - host: 10.10.10.3
    username: root
    # privateKeyPath: ~/.ssh/id_rsa
    password: "123"
    port: 22122
  - host: 10.10.10.4
    username: root
    # privateKeyPath: ~/.ssh/id_rsa
    password: "456"
    port: 22222
excludes:
  - 10.10.10.2
script: "/root/modify-sysctl.sh"

/root/modify-sysctl.sh脚本内容如下

#!/bin/bash
sed -i '/vm.dirty_background_ratio/d' /etc/sysctl.conf
sed -i '/vm.dirty_ratio/d' /etc/sysctl.conf
echo "vm.dirty_ratio=10" >> /etc/sysctl.conf
echo "vm.dirty_background_ratio=5" >> /etc/sysctl.conf
sysctl -p

相关文章

网友评论

    本文标题:【easyctl】使用easyctl跨主机并行执行shell

    本文链接:https://www.haomeiwen.com/subject/vgcqqrtx.html