背景说明
很多时候我们需要批量对主机执行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
- 下载编译好的文件
chmod +x easyctl
mv easyctl /usr/local/bin
-
兼容性
-
CentOS6
-
CentOS7
使用方式
- 生成默认配置文件
$ easyctl exec shell
INFO[0000] 生成配置文件样例, 请携带 -c 参数重新执行 -> config.yaml
- 修改配置文件
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"
- 执行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
:
-
privateKeyPath
为空,取password
值,ssh
使用密码登录方式 -
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.1
、10.10.10.3
、10.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.1
、10.10.10.3
、10.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.1
、10.10.10.3
、10.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
网友评论