收藏

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

2021-12-22  本文已影响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

使用方式

  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

配置项说明

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

配置样例

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
上一篇 下一篇

猜你喜欢

热点阅读