APP下载

基于Linux操作系统的批量管理工具

2017-06-27陈衍鹏

微型电脑应用 2017年6期
关键词:序列化批量脚本

陈衍鹏

(广东电网有限责任公司佛山供电局, 佛山 528000)

基于Linux操作系统的批量管理工具

陈衍鹏

(广东电网有限责任公司佛山供电局, 佛山 528000)

Linux批量管理工具,主要采用Python和Paramiko接口模块进行开发,针对部署了Linux操作系统的服务器进行脚本和命令的批量执行,包括服务器信息管理、上传下载管理、脚本信息管理以及帮助文档四大功能模块。通过Linux批量管理工具的应用,使Linux操作系统的日常运维以及安全整改工作得到巨大的效率提升,减少重复工作的人力和时间的投入。

Linux; Python; Paramiko; 批量管理

0 引言

目前,公司信息部门的日常工作中,运维工作需要登录后台操作系统进行巡检,查看服务器状态和相关参数;在法定长假前,需要进行服务器、数据库等的大检查;在年度安全整改中,需要对服务器上传扫描脚本,并且回传扫描结果,分析出结果后,由相关负责人进行漏洞整改,修改服务器相关文件和参数。这些工作只能人工登录服务器进行操作才能完成,当前服务器数量庞大,并且操作系统超过70%都是Linux操作系统,因此,需要耗费巨大的成本去完成这些较为繁琐的工作。

为了解决当前存在的问题,本人决定开发一套工具,可完成批量上传、下载、查询、执行等常用操作。使用该工具,不仅能极大地提高工作效率,降低人力和时间的损耗,同时还降低了人为的误操作,极大提高生产环境的安全性。

1 浅谈Python与Paramiko

python给我最初的印象便是简洁。所有的变量都不需要定义,这给了编程者很大的自由空间。如a=3,即可同时完成变量的定义和赋值。对于简化程序的代码,起到了很大的作用。库很多,博大精深,这样形容python最恰当不过了。正因为其强大的库,让编程不再艰难。只需要调用库中的函数,而对于函数的具体实现,没有特殊需求,无需探究。这无疑是编码者的福音。其次,与C/C++相比,所有语句末尾无需再添加繁琐的“;”(分号),因为每一行就是一个语句,并且使用简单而美观的缩进,规范了变量和语句的执行域,而摒弃了一贯使用的“{}”(花括号)作为界限,不仅使语句更加富有可读性,而且还为代码的编写者提供了良好的代码习惯[1]。

Paramiko模块是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接。Paramiko具有可读性高、入门简单、函数简洁、无需重新安装ssh等优点,Paramiko在与服务器建立连接后,生成ssh对象,包括使用交互式创建invoke_shell对象等。在完成操作后,ssh对象将返回out和err两个流对象,out是常规的输出信息,err是错误的输出信息,使用这两个对象,完成一系列的服务器操作。综合该模块的各种优点,本人选择了它作为核心模块来进行开发[2]。

2 需求分析

作为面向服务器日常运维的工具,需要进行一系列的需求分析,以满足常用功能的开发完整性。

2.1 服务器管理

由于服务器的数量庞大,使用工具的时候,首先解决的是批量登录。由于使用的模块是Paramiko进行开发,所以需要有完整的服务器IP地址、用户名、密码,因此工具需要提供的首要功能是服务器列表的导入和信息更改。由于服务器的用户名、密码都属于高密信息,因此需要进行加密。

2.2 文件管理

日常的运维工作中,不免经常需要上传文件、脚本等到服务器中,有时也需要从服务器中下载相关的文件到本机,所以本工具还需要实现文件上传和下载的功能。该功能的实现只需要调用Paramiko的sftp函数,因此服务器无需另外打开ftp服务,因此上传和下载的过程都处于主动推送和获取方式,减少了服务器重新配置的工作。由于上传和下载文件面向的是大量的服务器,需要解决的一个问题是文件过大时等待时间的问题,所以我们需要开启多线程对所有服务器的上传、下载操作进行单独处理[3]。

2.3 运行管理

工具的最重要的功能是批量执行脚本,因此需要对执行的全过程进行详细的规划。在执行脚本前,需要把脚本的列表展现在使用者面前,然后选中脚本进行下部分的操作。第一:查看脚本,脚本设置在scrip文件夹中存放,脚本的信息需要统一使用utf-8进行编码,主要是因为Linux默认的编码方式是美式utf-8方式,在查看脚本的功能中,可以看到脚本的详细内容,但不能修改;第二:修改脚本,修改脚本首先需要读取选中的脚本,然后对脚本进行展现,过程与查看脚本一致,但拥有修改权限,修改完成后可以进行保存,保存时需要保证编码方式是utf-8;第三:运行脚本,运行脚本分为两种方式,分别是已存在的脚本文件进行运行,另外是不执行脚本文件,而是在工具中输入命令来执行,前者使用sftp进行脚本文件的上传然后执行,后者则只需要对服务器传输脚本命令,然后返回执行结果即可[4]。

2.4 帮助

工具需要编写帮助文档,在点击帮助按钮后,可以显示帮助文档,帮助使用者使用该工具完成运维工作。

3 软件架构

完成上述的需求分析后,接下来就是进行软件架构的规划。工具按照需求所列出的功能,分为“服务器管理”、“上传下传管理”、“脚本管理”、“帮助文档”四大功能模块。功能模块需要建立在存储文件系统上,加密文件系统需要经过Python的接口模块进行序列化加密处理。在底层,需要使用XLRD、PICKLE、SFTP、PARAMIKO、CODECS作为整个工具的基础模块。在全局使用Python语言进行编写,软件架构图,如图1所示。

图1 批量管理工具软件架构图

3.1 功能模块

从上述功能模块可以看到,整个工具分为服务器管理、上传下传管理、脚本管理、帮助文档4个功能模块。

服务器管理主要完成服务器基本信息的记录、导入、展现、修改等功能。服务器基本信息包括:IP地址、登录的用户名、用户密码、root密码和服务器功能说明,由于这些信息都是高密资源,在存储过程中,需要使用加密的序列化文件进行保存。由于服务器数量庞大,在使用工具时,往往需要进行批量导入处理,所以需要使用excel表格对服务器的所有信息先进行记录,然后处理完后,再导入工具中,工具使用XLRD模块完成该功能。在展现服务器的方式主要是使用树形列表来完成,树形列表展现的内容有IP地址和服务器功能说明,用户名和密码均使用后台记录的方式来透明处理,无需展现。树形列表支持使用复选框进行选择,如需要进行批量管理,则只需要在对应的服务器前打勾即可。修改服务器信息则使用表格方式实现,首先读取后台记录的服务器信息,然后在工具中使用表格方式展示,并且在对应的表格中进行修改。

上传下载管理主要是完成本地文件往服务器方进行推送文件和本地向服务器方索取文件。上传和下载均使用SFTP方式完成,在使用paramiko建立了ssh连接后,调用sftp函数获取相应的对象,传递需要上传的文件路径或者需要下载的文件路径名,然后调用put或get函数即可以完成上传和下载的操作。当然,为了让工具更加富有人性化,下载的功能支持通配符的匹配,即可以输入“*.sql”就可以自动获取服务器中所有的以“.sql”结尾的文件,无需记住整个文件名。

脚本管理包括查看脚本、添加脚本、修改脚本、运行脚本四个功能。脚本的展现是使用列表方式完成,展示的内容主要是脚本名。查看脚本是查看选中的脚本内容,选中的脚本只记录脚本文件的存放路径,而查看脚本是先从存放路径中获取脚本对象,然后使用文件流进行读取,然后展现在用户面前。添加脚本则相反,在完成脚本内容的录入后,保存在规定的路径下,用户只需要提供必要的脚本名,然后使用文件流进行文件写入,完成脚本的添加[5]。修改脚本与查看脚本的方式一致,但是获取了修改的权限,在展现的内容中加以修改,然后使用文件流方式写入原文件中。运行脚本主要是针对选中的服务器进行脚本上传和执行,当然用户可以直接输入单行的命令,然后执行,完成批量管理的功能。

帮助文档,顾名思义就是帮助用户使用工具的文档,用户如果需要查看帮助文档,可以点击帮助文档查看使用手册。

3.2 存储系统

工具使用加密序列化文件系统进行存储。由于整个工具是建立在正确的服务器信息之上,信息不能泄露,并且不能通过外力人为获取,所以使用本工具并不使用数据库的方式来存储服务器的信息,而是使用序列化文件进行存储。通过序列化,使用独立的数据结构和独立的序列化、反序列化方式进行文件信息的读取,最终完成所有的基础信息获取。由于序列化文件初始化是空文件,无法读取任何服务器的基础信息,所以工具在使用初期需要使用添加IP地址的功能,完成服务器信息的录入和序列初始化操作[6]。

3.3 接口模块

XLRD模块是纯Python编写的Excel表格处理接口模块,该模块主要完成Excel的读取操作,对应实现的功能是IP地址的批量导入工作。

PICKLE模块是Python官方的序列化模块,其高级版本是CPICKLE,操作方式一样,但由于是使用C语言编写的,所以运行效率要更高。该模块主要完成服务器基础信息的序列化与反序列化处理[7]。

SFTP模块是属于本地上传下载处理的接口模块,该模块主要完成文件上传下载的操作。

PARAMIKO模块是使用Python编写的接口模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接[8]。该模块主要完成建立服务器的连接、创建交互式对象、执行脚本、执行命令行、获取返回信息等。对应实现的功能是运行脚本。

CODECS模块是Python的内核编码模块,该模块支持目前国际通用的编码方式。由于Linux默认的编码是utf-8,因此文件的读取、修改均使用utf-8编码完成。对应的实现功能是查看、添加、修改脚本文件。

4 功能实现

工具以批量管理的功能作为核心进行开发,批量管理需要使用定义的脚本,同时以服务器信息为基础,因此整个开发过程非常清晰。首先对工具划分为两大区域,第一是功能操作区,用于对服务器信息和脚本信息进行操作,通过Paramiko和sftp接口进行命令和脚本的传递和执行;第二是数据展示区,用于展示服务器执行命令后回传的输出数据,包括正确执行和错误执行的信息。工具分解图,如图2所示。

图2 批量管理工具分解图

功能操作区首先使用Pickle、Xlrd模块接口作为服务器信息导入、修改、读取的开发元素,完成服务器信息加密序列化和批量导入的功能,搭建出所有功能的基础信息。然后使用Codecs模块接口作为脚本信息的读取、修改、添加的开发元素,由于脚本文件属于对外开放的元素,所以没有使用序列化手段进行加密,但是需要使用接口中的Utf-8编码方式对脚本进行重新编辑,以防Linux无法读取脚本字符而产生无法找到执行命令的错误[9]。完成两个功能的开发后,工具使用Paramiko与sftp模块接口开发出基于服务器信息和脚本信息的脚本执行功能,脚本执行功能主要是整合需要批量操作的服务器信息和需要进行批量执行的脚本,然后打包发送给服务器,通过多线程ssh的方式完成批量操作,最终由服务器完成执行后返回操作结果[10]。

数据展示区是对返回的操作结果的展示,通过读取流对象,再进行重编译,形成字符串显示在工具的前端,提供给用户查看服务器执行的结果。在数据展示区需要注意的一点是服务器返回的格式数据,由于工具无法对格式数据进行处理,因此工具需要进行返回的信息流进行格式数据的匹配和删除,在此我们使用“正则表达式”对返回流进行统一的过滤,最终把完整的纯字符结果展示在工具前端。

5 总结

通过开发Linux批量管理工具,有效提高了日常服务器运维效率,需要完成的工作只是收集服务器的IP地址、用户名、密码等相关参数,然后导入工具中,而无需再重复登录服务器和并执行命令。该工具已经投入使用,并且已经审办了软件著作权,稳定运行,日常巡检需要用几个小时的时间,工具投入后仅需要10分钟即可完成查看。工具提供日志记录功能,在查看log文件夹可看到所有的日志文件,效率得到了明显的提升。随着国家“十三五”时期的到来,IT行业的投入将逐步提升,服务器数量也将增加,批量自动化处理的方式必将成为以后的方向。

[1] [美]Christian, Benvenut.深入理解Linux网络技术内幕 [M].夏宏,闫江毓,黄景昌,译. 北京:中国电力出版社,2009.

[2] [美] Paul,Barry.林琪,郭静译. Head First Python[M].北京:中国电力出版社,2012.

[3] [美] Ryan,Mitchell. Python 网络数据采集[M].陶俊杰,陈小莉,译.北京:人民邮电出版社,2016(1).

[4] 安晓辉. QT Quick核心编程[M].北京:电子工业出版社,2015.

[5] [美] Richard Blum,Christin Bresnahan.Linux命令行与shell脚本编程大全(第2版)[M].武海峰,译. 北京:人民邮电出版社,2012.

[6] 马玉军,陈连山. Red Hat Enterprise Linux 6.5系统管理[M].北京:清华大学出版社,2014.

[7] [日] 伊藤直也,胜见祐己,田中慎司.24小时365天不间断服务:服务器/基础设施核心技术[M].张毅,译. 北京:人民邮电出版社,2015.

[8] [韩]金泰龙. Linuxshell脚本编程入门[M].金香,译.北京:人民邮电出版社,2014.

[9] [印] Shantanu Tushar, Sarath Lakshman.Linux Shell脚本攻略(第2版)[M].门佳,译. 北京:人民邮电出版社,2014.

[10] 曹江华.RedHat EnterpriseLinux 7.0系统管理[M].北京:电子工业出版社,2016.

Batch Management Tool Based on Linux Operating System

Chen Yanpeng

(Foshan Power Supply Bureau, Guangdong Power Grid Limited Corporation, Foshan 528000, China)

Linux auto management tool is developed mainly by using Python and Paramiko interfaces. According to executing the scripts and command for the Linux operating system, this tool includes servers information management, upload or download management, script information management and help documentation. Through the application of Linux auto management tool, the daily operation and maintenance of the Linux operating system and the safety rectification work have been greatly promoted. It reduces the investment of human and time of the repetitive work.

Linux; Python; Paramiko; Auto management

陈衍鹏(1990-),男,研究方向:信息开发和管理,数据库。

1007-757X(2017)06-0077-04

TP311

A

2016.07.15)

猜你喜欢

序列化批量脚本
酒驾
基于FlatBuffers的机车通信数据序列化方法应用研究
批量提交在配置分发中的应用
安奇奇与小cool 龙(第二回)
如何建构序列化阅读教学
快乐假期
小编的新年愿望
基于VBA井斜数据批量校正方法
Java 反序列化漏洞研究
在数控车床上批量钻铰孔类工件的实践