batch_run,一种安全和自由的linux多机器批量部署开源工具

集群管理 2 1440 李艳青 收藏

如果我有一台服务器,希望用它来处理特定事物(比如运行EDA工具),那么我可能需要:

* 查看和了解系统的基本信息

* 安装依赖的系统库

* 安装依赖的系统工具

* 启动或关闭系统服务

* ...

如果我有一批服务器,做同样的事情,我可能需要pssh或者ansible,但是他们存在或多或少地存在一些问题:

* 需要明文输入密码

* 打印的信息不够个性化(不够简洁或者不够详细)

* 执行任务脚本不够简单

* ...


如果你会一点点python,那么在batch_run的基础上,如上问题都可以轻松解决。

那么batch_run是什么?

类似于pssh或者ansible,batch_run用于在多机器环境中批量推送和运行指定命令,同时在快捷操作/简洁显示/密码安全方面有独到之处。

batch_run的底层也是基于ssh实现的。

batch_run的地址位于 https://gitee.com/liyanqing1987/batch_run。

下面来演示如何安装/配置/使用它。


1. 获取安装包

登陆到batch_run的gitee地址,如下,点击“克隆/下载”来下载ZIP安装包。


1.jpg


将zip安装包拷贝到linux环境,安装目录下。


[root@cmp001 tools]# ls
anaconda3  batch_run-master.zip

解压缩。


[root@cmp001 tools]# unzip batch_run-master.zip 
Archive:  batch_run-master.zip
c8a963fed55640a372b763935175749c36b8c093
   creating: batch_run-master/
  inflating: batch_run-master/.gitignore  
  inflating: batch_run-master/LICENSE  
  inflating: batch_run-master/README  
   creating: batch_run-master/common/
  inflating: batch_run-master/common/common_password.so  
   creating: batch_run-master/config/
  inflating: batch_run-master/config/host.list  
 extracting: batch_run-master/config/password.encrypted  
  inflating: batch_run-master/install.py  
   creating: batch_run-master/scripts/
  inflating: batch_run-master/scripts/install_system_library.sh  
  inflating: batch_run-master/scripts/install_system_tools.sh  
 extracting: batch_run-master/scripts/print_os.sh  
   creating: batch_run-master/tools/
  inflating: batch_run-master/tools/encrypt_python.py  
  inflating: batch_run-master/tools/get_password.py  
  inflating: batch_run-master/tools/save_password.py

将解压后的目录 batch_run-master 重命名为 batch_run。

[root@cmp001 tools]# mv batch_run-master batch_run

进入batch_run目录,可见其文件结构如下。

[root@cmp001 tools]# cd batch_run/
[root@cmp001 batch_run]# ls
bin  common  config  install.py  LICENSE  README  scripts  tools

2. 安装

batch_run的安装依赖python3.8,推荐采用对应版本的anaconda,比如Anaconda3-2021.05-Linux-x86_64.sh.。

同时需要在python中安装加密模块Crypto,采用命令“pip install pycryptodome”可以便捷安装。

之后,进入batch_run的安装包目录下,采用命令 python3 install.py安装。

[root@cmp001 batch_run]# /ic/tools/anaconda3/bin/python3 install.py 
>>> Check python version.
    Required python version : (3, 8)
    Current  python version : (3, 8)
 
>>> Generate script "/ic/tools/batch_run/bin/batch_run".
>>> Generate script "/ic/tools/batch_run/tools/save_password".
>>> Generate script "/ic/tools/batch_run/tools/get_password".
>>> Generate script "/ic/tools/batch_run/tools/encrypt_python".
>>> Generate config file "/ic/tools/batch_run/config/config.py".
Done, Please enjoy it.

如果没有报错,那么就正常安装上了。

3. 配置

需要配置的主要文件位于安装目录的config目录下。

[root@cmp001 config]# ls
config.py  host.list  password.encrypted

其中config.py是常规配置,可以不配置。

host.list用于配置所有的默认机器ip列表,最好配置。

password.encrypted用于保存加密的用户名密码信息,最好配置。

3.1 配置config.py

默认的config.py如下。


# Specify host list, default is "host.list" on current configure directory.
HOST_LIST = "/ic/tools/batch_run/config/host.list"
 
# Valid ip format, for example, "10.212.20[67].\d+".
VALID_IP_FORMAT = ""
 
# Pre-ip, for example, "10.212.206".
PRE_IP = ""
 
# Default ssh command, for example, "ssh -X -o StrictHostKeyChecking=no".
DEFAULT_SSH_COMMAND = ""
HOST_LIST是默认配置好的,不需要修改。
VALID_IP_FORMAT用于ip合规性检查,如果你的host.list中的ip地址没有规律,此处可以不设置。
PRE_ID用于ip简写的支持(只写最后一个.后面的数字)。
DEFAULT_SSH_COMMAND用于配置默认的ssh命令(batch_run底层基于ssh)。


我们的配置如下。


# Specify host list, default is "host.list" on current configure directory.
HOST_LIST = "/ic/tools/batch_run/config/host.list"
 
# Valid ip format, for example, "10.212.20[67].\d+".
VALID_IP_FORMAT = ""
 
# Pre-ip, for example, "10.212.206".
PRE_IP = "192.168.246"
 
# Default ssh command, for example, "ssh -X -o StrictHostKeyChecking=no".
DEFAULT_SSH_COMMAND = "ssh -o StrictHostKeyChecking=no"
3.2 host.list的配置
默认的host.list如下,仅仅定义了格式。
## Format ##
# # Description
# # GROUP(group_name)
# ip <port>
# ip <port>
# ip <port>
我们把当前的3台机器配置其中。
# Master host
# GROUP(master)
192.168.246.141
 
# Cluster hosts
# GROUP(cluster)
192.168.246.140
192.168.246.128
其中192.168.246.141是当前机器,分到master组。
192.168.246.140和192.168.246.128是cluster相关的机器,分到cluster组。

如果机器的ssh端口从22修改为其他值,可以在host ip追加ssh port信息,比如 192.168.246.140 8080,这样batch_run可以从配置文件中直接获取机器默认的ssh port。

3.3 password.encrypted的配置

batch_run支持交互式输入ssh登陆密码,但是这样不太安全,你可以通过batch_run自带的工具将用户密码信息加密并保存于此,batch_run可以自动引用,既便捷,又能保证安全。

[root@cmp001 config]# ../tools/save_password -u root -p 870222
[root@cmp001 config]# cat password.encrypted 
root  30a777e97f52da1f7a1731b216f8ee6d

4. batch_run用法

batch_run支持多个参数。

[root@cmp001 batch_run]# bin/batch_run -h
usage: batch_run.py [-h] [-H HOSTS [HOSTS ...]] [-G HOST_GROUPS [HOST_GROUPS ...]] [-P PORT] [-u USER] [-p PASSWORD] [-c COMMAND [COMMAND ...]] [-m MULTI_COMMANDS] [-t TIMEOUT] [-C]
                    [-d]
optional arguments:
  -h, --help            show this help message and exit
  -H HOSTS [HOSTS ...], --hosts HOSTS [HOSTS ...]
                        Specify host(s) which run command on, default is all.
  -G HOST_GROUPS [HOST_GROUPS ...], --host_groups HOST_GROUPS [HOST_GROUPS ...]
                        Specify host group which run command on, default is all.
  -P PORT, --port PORT  Specify host port which ssh connect with, default is none.
  -u USER, --user USER  Specify the user when connectting host as.
  -p PASSWORD, --password PASSWORD
                        Specify the user password when connectting host with.
  -c COMMAND [COMMAND ...], --command COMMAND [COMMAND ...]
                        Specify command you want run on specified host(s).
  -m MULTI_COMMANDS, --multi_commands MULTI_COMMANDS
                        Specify command file, will execute line by line.
  -t TIMEOUT, --timeout TIMEOUT    Specify ssh command timeout, default is 100 seconds.
  -C, --compact             Enable compact mode, try to print output message on one line.
  -d, --debug             Enable debug mode,print more debug messages.

-H,用于指定一个或多个host ip,可以是ip全称,如果config.py中配置了PRE_IP变量,此处也可以仅输入最后一个.后面的数字。

-G,用于指定一个或多个host group,既host.list中的GROUP。通过group来区分和管理多台不同用途的host会非常方便。

-P,如果机器的ssh port不是22,可以通过参数-P指定ssh port。

-u,batch_run指定ssh的时候,默认使用当前用户登陆,你也可以设置制定的登陆用户,它会采用ssh USER@ip的方式登陆。

-p,如果没有配置ssh免密登陆,需要用参数-p明文输入用户密码,但是这样是不安全的,建议将常用的用户密码配置到password.encrypted文件中。

-c,登陆到指定机器上执行的命令。

-m,如果登陆到指定机器上后需要执行多条命令,可以将多条命令写入到一个文件中去,然后采用-m FILE的方式来执行,需要注意的是,文件中的“-”符号最好写成“\-”的方式转义一下。

-t,默认batch_run在每台机器上允许最长100秒的任务执行时间,如果任务执行时间过长,需要在此处指定最长时间。

-C,简洁输出模式,如果命令输出只有一行,可以采用这个参数。

-d,debug模式,输出详细信息,包括执行命令和执行输出结果。

其中-m参数,常用的一些多行命令文件,比如安装系统库的文件,比如安装系统工具的文件,可以写到安装目录下的scripts目录下,那么-m FILE的用法中,FILE不需要写明绝对路径,仅注明文件名就可以直接引用。

5. 示例

5.1 查看所有机器的操作系统版本,简洁显示

[root@cmp001 batch_run]# bin/batch_run -C -c "cat /etc/redhat-release"
>>> 192.168.246.141     CentOS Linux release 7.9.2009 (Core)
>>> 192.168.246.140     CentOS Linux release 7.9.2009 (Core)
>>> 192.168.246.128     CentOS Linux release 7.9.2009 (Core)

5.2 指定机器组安装系统工具,debug模式

[root@cmp001 batch_run]# bin/batch_run -c "yum install \-y ksh" -G cluster -d
 
>>> 192.168.246.140
    ssh -o StrictHostKeyChecking=no root@192.168.246.140 yum install \-y ksh
    ==== output ====
    Loaded plugins: fastestmirror, langpacks
    Loading mirror speeds from cached hostfile
     * base: mirrors.tuna.tsinghua.edu.cn
     * extras: mirrors.huaweicloud.com
     * updates: mirrors.tuna.tsinghua.edu.cn
    Package ksh-20120801-142.el7.x86_64 already installed and latest version
    Nothing to do
    ================
 
>>> 192.168.246.128
    ssh -o StrictHostKeyChecking=no root@192.168.246.128 yum install \-y ksh
    ==== output ====
    Loaded plugins: fastestmirror, langpacks
    Loading mirror speeds from cached hostfile
     * base: mirrors.tuna.tsinghua.edu.cn
     * epel: mirrors.tuna.tsinghua.edu.cn
     * extras: mirrors.huaweicloud.com
     * updates: mirrors.huaweicloud.com
    Resolving Dependencies
    --> Running transaction check
    ---> Package ksh.x86_64 0:20120801-142.el7 will be installed
    --> Finished Dependency Resolution
    
    Dependencies Resolved
    
    ================================================================================
     Package       Arch             Version                    Repository      Size
    ================================================================================
    Installing:
     ksh           x86_64           20120801-142.el7           base           884 k
    
    Transaction Summary
    ================================================================================
    Install  1 Package
    
    Total download size: 884 k
    Installed size: 3.1 M
    Downloading packages:
    Running transaction check
    Running transaction test
    Transaction test succeeded
    Running transaction
      Installing : ksh-20120801-142.el7.x86_64                                  1/1 
      Verifying  : ksh-20120801-142.el7.x86_64                                  1/1 
    
    Installed:
      ksh.x86_64 0:20120801-142.el7                                                 
    
    Complete!
    ================

5.3 指定机器安装多个系统库,机器ip简写

[root@cmp001 batch_run]# bin/batch_run -m install_system_library.sh -H 140
 
>>> 192.168.246.140
    Loaded plugins: fastestmirror, langpacks
    Loading mirror speeds from cached hostfile
...
    Dependencies Resolved
    
    ================================================================================
     Package       Arch            Version                      Repository     Size
    ================================================================================
    Installing:
     gitk          noarch          1.8.3.1-23.el7_8             base          152 k
    
    Transaction Summary
    ================================================================================
    Install  1 Package
    
    Total download size: 152 k
    Installed size: 587 k
    Downloading packages:
    Running transaction check
    Running transaction test
    Transaction test succeeded
    Running transaction
      Installing : gitk-1.8.3.1-23.el7_8.noarch                                 1/1 
      Verifying  : gitk-1.8.3.1-23.el7_8.noarch                                 1/1 
    
    Installed:
      gitk.noarch 0:1.8.3.1-23.el7_8                                                
    
    Complete!

6. 特色功能说明

6.1 密码安全

不同于pssh的明文密码,batch_run的用户密码可以通过工具save_password加密后密文保存,batch_run执行ssh的时候可以自行引用,既免去了用户输入密码的繁琐,也保证了用户密码安全。

6.2 简洁显示

batch_run同时支持 简洁模式/正常模式/debug模式,可以确保按照自己需要的力度输出命令输出信息。

其中的简洁模式(-C参数)非常适合一些简短信息的收集。

6.3 便捷操作

支持单命令行模式(-c参数),也支持多命令行模式(-m参数),而且针对多命令行模式,还可以把一些常用操作(比如install_system_tools.sh)直接以文件的形式保存到安装目录下的scripts中,需要的时候直接文件名调用,非常方便。

6.4 可定制化

虽然pssh和ansible本身功能强大,但是他们总有一些不能满足用户个性化需求的地方,而用户很难找到合适的接口和途径对他们做定制化开发。

而batch_run采用python明文开发(除了common_password.so密码模块本身做了加密),用户可以按照自己的需求,在batch_run的基础上做二次开发,打造一款适用于自己公司的定制化多机器批量推送和任务运行工具!



相关推荐:

网友留言:

  1. charles.cl
    回复
    工具包无法下载了可以提供一份么。
    1. 团子精英
      回复
      已咨询原作者,目前已下架,过一段时间会重新开源。
您需要 登录账户 后才能发表评论

我要评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。
验证码