陳衍鵬
(廣東電網(wǎng)有限責(zé)任公司佛山供電局, 佛山 528000)
基于Linux操作系統(tǒng)的批量管理工具
陳衍鵬
(廣東電網(wǎng)有限責(zé)任公司佛山供電局, 佛山 528000)
Linux批量管理工具,主要采用Python和Paramiko接口模塊進(jìn)行開(kāi)發(fā),針對(duì)部署了Linux操作系統(tǒng)的服務(wù)器進(jìn)行腳本和命令的批量執(zhí)行,包括服務(wù)器信息管理、上傳下載管理、腳本信息管理以及幫助文檔四大功能模塊。通過(guò)Linux批量管理工具的應(yīng)用,使Linux操作系統(tǒng)的日常運(yùn)維以及安全整改工作得到巨大的效率提升,減少重復(fù)工作的人力和時(shí)間的投入。
Linux; Python; Paramiko; 批量管理
目前,公司信息部門的日常工作中,運(yùn)維工作需要登錄后臺(tái)操作系統(tǒng)進(jìn)行巡檢,查看服務(wù)器狀態(tài)和相關(guān)參數(shù);在法定長(zhǎng)假前,需要進(jìn)行服務(wù)器、數(shù)據(jù)庫(kù)等的大檢查;在年度安全整改中,需要對(duì)服務(wù)器上傳掃描腳本,并且回傳掃描結(jié)果,分析出結(jié)果后,由相關(guān)負(fù)責(zé)人進(jìn)行漏洞整改,修改服務(wù)器相關(guān)文件和參數(shù)。這些工作只能人工登錄服務(wù)器進(jìn)行操作才能完成,當(dāng)前服務(wù)器數(shù)量龐大,并且操作系統(tǒng)超過(guò)70%都是Linux操作系統(tǒng),因此,需要耗費(fèi)巨大的成本去完成這些較為繁瑣的工作。
為了解決當(dāng)前存在的問(wèn)題,本人決定開(kāi)發(fā)一套工具,可完成批量上傳、下載、查詢、執(zhí)行等常用操作。使用該工具,不僅能極大地提高工作效率,降低人力和時(shí)間的損耗,同時(shí)還降低了人為的誤操作,極大提高生產(chǎn)環(huán)境的安全性。
python給我最初的印象便是簡(jiǎn)潔。所有的變量都不需要定義,這給了編程者很大的自由空間。如a=3,即可同時(shí)完成變量的定義和賦值。對(duì)于簡(jiǎn)化程序的代碼,起到了很大的作用。庫(kù)很多,博大精深,這樣形容python最恰當(dāng)不過(guò)了。正因?yàn)槠鋸?qiáng)大的庫(kù),讓編程不再艱難。只需要調(diào)用庫(kù)中的函數(shù),而對(duì)于函數(shù)的具體實(shí)現(xiàn),沒(méi)有特殊需求,無(wú)需探究。這無(wú)疑是編碼者的福音。其次,與C/C++相比,所有語(yǔ)句末尾無(wú)需再添加繁瑣的“;”(分號(hào)),因?yàn)槊恳恍芯褪且粋€(gè)語(yǔ)句,并且使用簡(jiǎn)單而美觀的縮進(jìn),規(guī)范了變量和語(yǔ)句的執(zhí)行域,而摒棄了一貫使用的“{}”(花括號(hào))作為界限,不僅使語(yǔ)句更加富有可讀性,而且還為代碼的編寫者提供了良好的代碼習(xí)慣[1]。
Paramiko模塊是用python語(yǔ)言寫的一個(gè)模塊,遵循SSH2協(xié)議,支持以加密和認(rèn)證的方式,進(jìn)行遠(yuǎn)程服務(wù)器的連接。Paramiko具有可讀性高、入門簡(jiǎn)單、函數(shù)簡(jiǎn)潔、無(wú)需重新安裝ssh等優(yōu)點(diǎn),Paramiko在與服務(wù)器建立連接后,生成ssh對(duì)象,包括使用交互式創(chuàng)建invoke_shell對(duì)象等。在完成操作后,ssh對(duì)象將返回out和err兩個(gè)流對(duì)象,out是常規(guī)的輸出信息,err是錯(cuò)誤的輸出信息,使用這兩個(gè)對(duì)象,完成一系列的服務(wù)器操作。綜合該模塊的各種優(yōu)點(diǎn),本人選擇了它作為核心模塊來(lái)進(jìn)行開(kāi)發(fā)[2]。
作為面向服務(wù)器日常運(yùn)維的工具,需要進(jìn)行一系列的需求分析,以滿足常用功能的開(kāi)發(fā)完整性。
2.1 服務(wù)器管理
由于服務(wù)器的數(shù)量龐大,使用工具的時(shí)候,首先解決的是批量登錄。由于使用的模塊是Paramiko進(jìn)行開(kāi)發(fā),所以需要有完整的服務(wù)器IP地址、用戶名、密碼,因此工具需要提供的首要功能是服務(wù)器列表的導(dǎo)入和信息更改。由于服務(wù)器的用戶名、密碼都屬于高密信息,因此需要進(jìn)行加密。
2.2 文件管理
日常的運(yùn)維工作中,不免經(jīng)常需要上傳文件、腳本等到服務(wù)器中,有時(shí)也需要從服務(wù)器中下載相關(guān)的文件到本機(jī),所以本工具還需要實(shí)現(xiàn)文件上傳和下載的功能。該功能的實(shí)現(xiàn)只需要調(diào)用Paramiko的sftp函數(shù),因此服務(wù)器無(wú)需另外打開(kāi)ftp服務(wù),因此上傳和下載的過(guò)程都處于主動(dòng)推送和獲取方式,減少了服務(wù)器重新配置的工作。由于上傳和下載文件面向的是大量的服務(wù)器,需要解決的一個(gè)問(wèn)題是文件過(guò)大時(shí)等待時(shí)間的問(wèn)題,所以我們需要開(kāi)啟多線程對(duì)所有服務(wù)器的上傳、下載操作進(jìn)行單獨(dú)處理[3]。
2.3 運(yùn)行管理
工具的最重要的功能是批量執(zhí)行腳本,因此需要對(duì)執(zhí)行的全過(guò)程進(jìn)行詳細(xì)的規(guī)劃。在執(zhí)行腳本前,需要把腳本的列表展現(xiàn)在使用者面前,然后選中腳本進(jìn)行下部分的操作。第一:查看腳本,腳本設(shè)置在scrip文件夾中存放,腳本的信息需要統(tǒng)一使用utf-8進(jìn)行編碼,主要是因?yàn)長(zhǎng)inux默認(rèn)的編碼方式是美式utf-8方式,在查看腳本的功能中,可以看到腳本的詳細(xì)內(nèi)容,但不能修改;第二:修改腳本,修改腳本首先需要讀取選中的腳本,然后對(duì)腳本進(jìn)行展現(xiàn),過(guò)程與查看腳本一致,但擁有修改權(quán)限,修改完成后可以進(jìn)行保存,保存時(shí)需要保證編碼方式是utf-8;第三:運(yùn)行腳本,運(yùn)行腳本分為兩種方式,分別是已存在的腳本文件進(jìn)行運(yùn)行,另外是不執(zhí)行腳本文件,而是在工具中輸入命令來(lái)執(zhí)行,前者使用sftp進(jìn)行腳本文件的上傳然后執(zhí)行,后者則只需要對(duì)服務(wù)器傳輸腳本命令,然后返回執(zhí)行結(jié)果即可[4]。
2.4 幫助
工具需要編寫幫助文檔,在點(diǎn)擊幫助按鈕后,可以顯示幫助文檔,幫助使用者使用該工具完成運(yùn)維工作。
完成上述的需求分析后,接下來(lái)就是進(jìn)行軟件架構(gòu)的規(guī)劃。工具按照需求所列出的功能,分為“服務(wù)器管理”、“上傳下傳管理”、“腳本管理”、“幫助文檔”四大功能模塊。功能模塊需要建立在存儲(chǔ)文件系統(tǒng)上,加密文件系統(tǒng)需要經(jīng)過(guò)Python的接口模塊進(jìn)行序列化加密處理。在底層,需要使用XLRD、PICKLE、SFTP、PARAMIKO、CODECS作為整個(gè)工具的基礎(chǔ)模塊。在全局使用Python語(yǔ)言進(jìn)行編寫,軟件架構(gòu)圖,如圖1所示。
圖1 批量管理工具軟件架構(gòu)圖
3.1 功能模塊
從上述功能模塊可以看到,整個(gè)工具分為服務(wù)器管理、上傳下傳管理、腳本管理、幫助文檔4個(gè)功能模塊。
服務(wù)器管理主要完成服務(wù)器基本信息的記錄、導(dǎo)入、展現(xiàn)、修改等功能。服務(wù)器基本信息包括:IP地址、登錄的用戶名、用戶密碼、root密碼和服務(wù)器功能說(shuō)明,由于這些信息都是高密資源,在存儲(chǔ)過(guò)程中,需要使用加密的序列化文件進(jìn)行保存。由于服務(wù)器數(shù)量龐大,在使用工具時(shí),往往需要進(jìn)行批量導(dǎo)入處理,所以需要使用excel表格對(duì)服務(wù)器的所有信息先進(jìn)行記錄,然后處理完后,再導(dǎo)入工具中,工具使用XLRD模塊完成該功能。在展現(xiàn)服務(wù)器的方式主要是使用樹(shù)形列表來(lái)完成,樹(shù)形列表展現(xiàn)的內(nèi)容有IP地址和服務(wù)器功能說(shuō)明,用戶名和密碼均使用后臺(tái)記錄的方式來(lái)透明處理,無(wú)需展現(xiàn)。樹(shù)形列表支持使用復(fù)選框進(jìn)行選擇,如需要進(jìn)行批量管理,則只需要在對(duì)應(yīng)的服務(wù)器前打勾即可。修改服務(wù)器信息則使用表格方式實(shí)現(xiàn),首先讀取后臺(tái)記錄的服務(wù)器信息,然后在工具中使用表格方式展示,并且在對(duì)應(yīng)的表格中進(jìn)行修改。
上傳下載管理主要是完成本地文件往服務(wù)器方進(jìn)行推送文件和本地向服務(wù)器方索取文件。上傳和下載均使用SFTP方式完成,在使用paramiko建立了ssh連接后,調(diào)用sftp函數(shù)獲取相應(yīng)的對(duì)象,傳遞需要上傳的文件路徑或者需要下載的文件路徑名,然后調(diào)用put或get函數(shù)即可以完成上傳和下載的操作。當(dāng)然,為了讓工具更加富有人性化,下載的功能支持通配符的匹配,即可以輸入“*.sql”就可以自動(dòng)獲取服務(wù)器中所有的以“.sql”結(jié)尾的文件,無(wú)需記住整個(gè)文件名。
腳本管理包括查看腳本、添加腳本、修改腳本、運(yùn)行腳本四個(gè)功能。腳本的展現(xiàn)是使用列表方式完成,展示的內(nèi)容主要是腳本名。查看腳本是查看選中的腳本內(nèi)容,選中的腳本只記錄腳本文件的存放路徑,而查看腳本是先從存放路徑中獲取腳本對(duì)象,然后使用文件流進(jìn)行讀取,然后展現(xiàn)在用戶面前。添加腳本則相反,在完成腳本內(nèi)容的錄入后,保存在規(guī)定的路徑下,用戶只需要提供必要的腳本名,然后使用文件流進(jìn)行文件寫入,完成腳本的添加[5]。修改腳本與查看腳本的方式一致,但是獲取了修改的權(quán)限,在展現(xiàn)的內(nèi)容中加以修改,然后使用文件流方式寫入原文件中。運(yùn)行腳本主要是針對(duì)選中的服務(wù)器進(jìn)行腳本上傳和執(zhí)行,當(dāng)然用戶可以直接輸入單行的命令,然后執(zhí)行,完成批量管理的功能。
幫助文檔,顧名思義就是幫助用戶使用工具的文檔,用戶如果需要查看幫助文檔,可以點(diǎn)擊幫助文檔查看使用手冊(cè)。
3.2 存儲(chǔ)系統(tǒng)
工具使用加密序列化文件系統(tǒng)進(jìn)行存儲(chǔ)。由于整個(gè)工具是建立在正確的服務(wù)器信息之上,信息不能泄露,并且不能通過(guò)外力人為獲取,所以使用本工具并不使用數(shù)據(jù)庫(kù)的方式來(lái)存儲(chǔ)服務(wù)器的信息,而是使用序列化文件進(jìn)行存儲(chǔ)。通過(guò)序列化,使用獨(dú)立的數(shù)據(jù)結(jié)構(gòu)和獨(dú)立的序列化、反序列化方式進(jìn)行文件信息的讀取,最終完成所有的基礎(chǔ)信息獲取。由于序列化文件初始化是空文件,無(wú)法讀取任何服務(wù)器的基礎(chǔ)信息,所以工具在使用初期需要使用添加IP地址的功能,完成服務(wù)器信息的錄入和序列初始化操作[6]。
3.3 接口模塊
XLRD模塊是純Python編寫的Excel表格處理接口模塊,該模塊主要完成Excel的讀取操作,對(duì)應(yīng)實(shí)現(xiàn)的功能是IP地址的批量導(dǎo)入工作。
PICKLE模塊是Python官方的序列化模塊,其高級(jí)版本是CPICKLE,操作方式一樣,但由于是使用C語(yǔ)言編寫的,所以運(yùn)行效率要更高。該模塊主要完成服務(wù)器基礎(chǔ)信息的序列化與反序列化處理[7]。
SFTP模塊是屬于本地上傳下載處理的接口模塊,該模塊主要完成文件上傳下載的操作。
PARAMIKO模塊是使用Python編寫的接口模塊,遵循SSH2協(xié)議,支持以加密和認(rèn)證的方式,進(jìn)行遠(yuǎn)程服務(wù)器的連接[8]。該模塊主要完成建立服務(wù)器的連接、創(chuàng)建交互式對(duì)象、執(zhí)行腳本、執(zhí)行命令行、獲取返回信息等。對(duì)應(yīng)實(shí)現(xiàn)的功能是運(yùn)行腳本。
CODECS模塊是Python的內(nèi)核編碼模塊,該模塊支持目前國(guó)際通用的編碼方式。由于Linux默認(rèn)的編碼是utf-8,因此文件的讀取、修改均使用utf-8編碼完成。對(duì)應(yīng)的實(shí)現(xiàn)功能是查看、添加、修改腳本文件。
工具以批量管理的功能作為核心進(jìn)行開(kāi)發(fā),批量管理需要使用定義的腳本,同時(shí)以服務(wù)器信息為基礎(chǔ),因此整個(gè)開(kāi)發(fā)過(guò)程非常清晰。首先對(duì)工具劃分為兩大區(qū)域,第一是功能操作區(qū),用于對(duì)服務(wù)器信息和腳本信息進(jìn)行操作,通過(guò)Paramiko和sftp接口進(jìn)行命令和腳本的傳遞和執(zhí)行;第二是數(shù)據(jù)展示區(qū),用于展示服務(wù)器執(zhí)行命令后回傳的輸出數(shù)據(jù),包括正確執(zhí)行和錯(cuò)誤執(zhí)行的信息。工具分解圖,如圖2所示。
圖2 批量管理工具分解圖
功能操作區(qū)首先使用Pickle、Xlrd模塊接口作為服務(wù)器信息導(dǎo)入、修改、讀取的開(kāi)發(fā)元素,完成服務(wù)器信息加密序列化和批量導(dǎo)入的功能,搭建出所有功能的基礎(chǔ)信息。然后使用Codecs模塊接口作為腳本信息的讀取、修改、添加的開(kāi)發(fā)元素,由于腳本文件屬于對(duì)外開(kāi)放的元素,所以沒(méi)有使用序列化手段進(jìn)行加密,但是需要使用接口中的Utf-8編碼方式對(duì)腳本進(jìn)行重新編輯,以防Linux無(wú)法讀取腳本字符而產(chǎn)生無(wú)法找到執(zhí)行命令的錯(cuò)誤[9]。完成兩個(gè)功能的開(kāi)發(fā)后,工具使用Paramiko與sftp模塊接口開(kāi)發(fā)出基于服務(wù)器信息和腳本信息的腳本執(zhí)行功能,腳本執(zhí)行功能主要是整合需要批量操作的服務(wù)器信息和需要進(jìn)行批量執(zhí)行的腳本,然后打包發(fā)送給服務(wù)器,通過(guò)多線程ssh的方式完成批量操作,最終由服務(wù)器完成執(zhí)行后返回操作結(jié)果[10]。
數(shù)據(jù)展示區(qū)是對(duì)返回的操作結(jié)果的展示,通過(guò)讀取流對(duì)象,再進(jìn)行重編譯,形成字符串顯示在工具的前端,提供給用戶查看服務(wù)器執(zhí)行的結(jié)果。在數(shù)據(jù)展示區(qū)需要注意的一點(diǎn)是服務(wù)器返回的格式數(shù)據(jù),由于工具無(wú)法對(duì)格式數(shù)據(jù)進(jìn)行處理,因此工具需要進(jìn)行返回的信息流進(jìn)行格式數(shù)據(jù)的匹配和刪除,在此我們使用“正則表達(dá)式”對(duì)返回流進(jìn)行統(tǒng)一的過(guò)濾,最終把完整的純字符結(jié)果展示在工具前端。
通過(guò)開(kāi)發(fā)Linux批量管理工具,有效提高了日常服務(wù)器運(yùn)維效率,需要完成的工作只是收集服務(wù)器的IP地址、用戶名、密碼等相關(guān)參數(shù),然后導(dǎo)入工具中,而無(wú)需再重復(fù)登錄服務(wù)器和并執(zhí)行命令。該工具已經(jīng)投入使用,并且已經(jīng)審辦了軟件著作權(quán),穩(wěn)定運(yùn)行,日常巡檢需要用幾個(gè)小時(shí)的時(shí)間,工具投入后僅需要10分鐘即可完成查看。工具提供日志記錄功能,在查看log文件夾可看到所有的日志文件,效率得到了明顯的提升。隨著國(guó)家“十三五”時(shí)期的到來(lái),IT行業(yè)的投入將逐步提升,服務(wù)器數(shù)量也將增加,批量自動(dòng)化處理的方式必將成為以后的方向。
[1] [美]Christian, Benvenut.深入理解Linux網(wǎng)絡(luò)技術(shù)內(nèi)幕 [M].夏宏,閆江毓,黃景昌,譯. 北京:中國(guó)電力出版社,2009.
[2] [美] Paul,Barry.林琪,郭靜譯. Head First Python[M].北京:中國(guó)電力出版社,2012.
[3] [美] Ryan,Mitchell. Python 網(wǎng)絡(luò)數(shù)據(jù)采集[M].陶俊杰,陳小莉,譯.北京:人民郵電出版社,2016(1).
[4] 安曉輝. QT Quick核心編程[M].北京:電子工業(yè)出版社,2015.
[5] [美] Richard Blum,Christin Bresnahan.Linux命令行與shell腳本編程大全(第2版)[M].武海峰,譯. 北京:人民郵電出版社,2012.
[6] 馬玉軍,陳連山. Red Hat Enterprise Linux 6.5系統(tǒng)管理[M].北京:清華大學(xué)出版社,2014.
[7] [日] 伊藤直也,勝見(jiàn)祐己,田中慎司.24小時(shí)365天不間斷服務(wù):服務(wù)器/基礎(chǔ)設(shè)施核心技術(shù)[M].張毅,譯. 北京:人民郵電出版社,2015.
[8] [韓]金泰龍. Linuxshell腳本編程入門[M].金香,譯.北京:人民郵電出版社,2014.
[9] [印] Shantanu Tushar, Sarath Lakshman.Linux Shell腳本攻略(第2版)[M].門佳,譯. 北京:人民郵電出版社,2014.
[10] 曹江華.RedHat EnterpriseLinux 7.0系統(tǒng)管理[M].北京:電子工業(yè)出版社,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-),男,研究方向:信息開(kāi)發(fā)和管理,數(shù)據(jù)庫(kù)。
1007-757X(2017)06-0077-04
TP311
A
2016.07.15)