洛陽(yáng)光電技術(shù)發(fā)展中心 高佳林
?
針對(duì)linux服務(wù)器交互式自動(dòng)化腳本實(shí)現(xiàn)與研究
洛陽(yáng)光電技術(shù)發(fā)展中心 高佳林
【摘要】本文介紹了在linux服務(wù)器集群之間為了降低服務(wù)器之間由于linux操作系統(tǒng)的安全設(shè)置所帶來(lái)不必要的損耗,所以在linux集群服務(wù)器之間實(shí)現(xiàn)無(wú)密碼的SSH登錄,同時(shí)為了減少人工的干預(yù)把整個(gè)過(guò)程集成到集群的安裝過(guò)程中實(shí)現(xiàn).無(wú)密碼登錄SSH需要交互式腳本實(shí)現(xiàn),但是普通的linux服務(wù)器無(wú)法實(shí)現(xiàn)無(wú)人工干預(yù)的實(shí)現(xiàn)服務(wù)器之間生成公鑰的過(guò)程,所以需要用expect實(shí)現(xiàn)。并將其寫(xiě)入RPM包中,實(shí)現(xiàn)安裝過(guò)程的全自動(dòng)化。
【關(guān)鍵詞】無(wú)密碼;SSH登錄;RPM包
隨著信息技術(shù)的快速發(fā)展,本地應(yīng)用逐步轉(zhuǎn)向網(wǎng)絡(luò)應(yīng)用,高性能計(jì)算也由傳統(tǒng)的主機(jī)方式向網(wǎng)絡(luò)化集群演變,網(wǎng)絡(luò)存儲(chǔ)已經(jīng)占據(jù)了存儲(chǔ)系統(tǒng)的主流地位。伴隨著計(jì)算技術(shù)、網(wǎng)絡(luò)通信和信息儲(chǔ)存等各項(xiàng)技術(shù)取得的巨大進(jìn)步,特別是高性能計(jì)算技術(shù)和應(yīng)用軟件的快速發(fā)展,基于主機(jī)的存儲(chǔ)系統(tǒng)無(wú)法滿足應(yīng)用系統(tǒng)的需求,傳統(tǒng)的網(wǎng)絡(luò)存儲(chǔ)設(shè)備,也日益成為整個(gè)應(yīng)用系統(tǒng)的性能瓶頸。為了解決單個(gè)服務(wù)器系統(tǒng)在數(shù)據(jù)存儲(chǔ)等方面的瓶頸,提出了分布式存儲(chǔ),即:數(shù)據(jù)和程序可以不位于一個(gè)服務(wù)器上,而是分散到多個(gè)服務(wù)器,以網(wǎng)絡(luò)上分散分布的地理信息數(shù)據(jù)及受其影響的數(shù)據(jù)庫(kù)操作為研究對(duì)象的一種理論計(jì)算模型服務(wù)器形式。分布式有利于任務(wù)在整個(gè)計(jì)算機(jī)系統(tǒng)上進(jìn)行分配與優(yōu)化,克服了傳統(tǒng)集中式系統(tǒng)會(huì)導(dǎo)致中心主機(jī)資源緊張與響應(yīng)瓶頸的缺陷,解決了網(wǎng)絡(luò)GIS 中存在的數(shù)據(jù)異構(gòu)、數(shù)據(jù)共享、運(yùn)算復(fù)雜等問(wèn)題,是系統(tǒng)技術(shù)的一大進(jìn)步。
隨著高性能計(jì)算應(yīng)用的深化以及非結(jié)構(gòu)化數(shù)據(jù)的爆炸性增長(zhǎng),以滿足并行I/O和結(jié)構(gòu)化數(shù)據(jù)I/O需求為目標(biāo)的傳統(tǒng)存儲(chǔ)架構(gòu),在性能、可靠性、擴(kuò)展性以及總體擁有成本上,已經(jīng)無(wú)法滿足跳躍性發(fā)展的高性能計(jì)算機(jī)及其配套的大型應(yīng)用軟件的需求,存儲(chǔ)日益成為整個(gè)應(yīng)用系統(tǒng)的性能瓶頸。通過(guò)增加磁盤數(shù)量、提升處理器性能和內(nèi)存容量等方法可以暫時(shí)緩解客戶對(duì)于性能的需求,但無(wú)法從根本上解決傳統(tǒng)架構(gòu)存儲(chǔ)系統(tǒng)的性能瓶頸問(wèn)題,這就促使存儲(chǔ)系統(tǒng)的架構(gòu)必須做出改變。
1.1無(wú)密碼SSH登錄
首先需要保證系統(tǒng)環(huán)境已經(jīng)準(zhǔn)備就緒。但是在實(shí)際的部署過(guò)程中,特別是大集群環(huán)境下,往往會(huì)因?yàn)閭€(gè)別節(jié)點(diǎn)的環(huán)境未準(zhǔn)備就緒導(dǎo)致系統(tǒng)安裝部署的失敗,而依靠人工維護(hù)成本較高。為此,需要一個(gè)系統(tǒng)安裝環(huán)境檢測(cè)的自動(dòng)化工具,實(shí)現(xiàn)系統(tǒng)安裝環(huán)境的自動(dòng)化檢測(cè),并根據(jù)檢測(cè)的結(jié)果報(bào)告進(jìn)行相應(yīng)的處理。在系統(tǒng)里各個(gè)服務(wù)器之間有很多數(shù)據(jù)的交互,如果還需要密碼來(lái)實(shí)現(xiàn)檢測(cè)訪問(wèn)用戶就會(huì)有很大額外消耗,為了服務(wù)器之間訪問(wèn)的方便,需要設(shè)置機(jī)器之間直接登陸而無(wú)需輸入登陸密碼。但是又為了保證服務(wù)器之間通信的安全性所以選擇用SSH服務(wù),用交換公鑰方式來(lái)實(shí)現(xiàn)安全的無(wú)密碼登錄。
下面通過(guò)實(shí)驗(yàn)實(shí)現(xiàn)兩臺(tái)模擬服務(wù)器之間的通信:有Server A,Server B通過(guò)一個(gè)交換機(jī)連接Server A的IP地址是192.168.0.1,而Server B的IP地址是192.168.0.2。
(1)從集群中選擇一臺(tái)服務(wù)器Server A,然后執(zhí)行sshkeygen–t rsa命令,在目錄~/root/.ssh目錄下生成id_rsa和id_rsa.pub密鑰對(duì)。
(2)將Server A上~/root/.ssh目錄下的文件authorized_keys、id_rsa拷貝到其它的服務(wù)節(jié)點(diǎn)的~/root/.ssh目錄下。
(3)將Server A上/etc/hosts文件拷貝到其它服務(wù)節(jié)點(diǎn)的/etc目錄下。
(4)從ServerA上使用命令“ssh IP地址”登錄其它的服務(wù)器節(jié)點(diǎn),然后在其它的服務(wù)節(jié)點(diǎn)上刪除Server A的訪問(wèn)記錄,操作方法是刪除其它服務(wù)器節(jié)點(diǎn)上/root/.ssh/known_hosts文件中關(guān)于ServerA的訪問(wèn)記錄,以實(shí)現(xiàn)雙向的無(wú)密碼訪問(wèn)。
(5)為了提高訪問(wèn)效率,需要修改每臺(tái)服務(wù)器上的文件/etc/ssh/sshd_config,將其中的“UseDNS”的值改為“no”,即取消其前面的注釋符“#”,然后將“MaxStartups”的值設(shè)置更大的值,如100,并取消其前面的注釋符“#”。修改完后運(yùn)行“/etc/init.d/sshd restart”讓配置文件生效。
(6)進(jìn)行完上述的操作后,在每臺(tái)服務(wù)器上實(shí)行“ssh 192.168.0.1”操作,如果還需要輸入密碼,則執(zhí)行ssh-copy-id –i /root/.ssh/id_rsa.pub 192.168.0.1發(fā)送公鑰給192.168.0.1。
如此就可以實(shí)現(xiàn)服務(wù)器間無(wú)密碼訪問(wèn)了。上述操作如圖1所示。
圖1
1.2自動(dòng)化腳本
此時(shí)已經(jīng)可以實(shí)現(xiàn)服務(wù)器無(wú)密碼登錄但是我們要將其整個(gè)過(guò)程自動(dòng)化實(shí)現(xiàn)。要實(shí)現(xiàn)的自動(dòng)化過(guò)程是寫(xiě)入sshkeygen–t rsa屏幕上輸出要求設(shè)定生成密鑰的目錄直接回車后選擇默認(rèn)的目錄,然后屏幕會(huì)提示要求輸入互通的密鑰,依然回車選擇默認(rèn)的空密碼。但通過(guò)實(shí)驗(yàn)發(fā)現(xiàn)簡(jiǎn)單的通過(guò)shell腳本無(wú)法一次性的自動(dòng)生成密鑰文件,將上面的命令全部按照語(yǔ)法寫(xiě)入shell腳本后運(yùn)行時(shí)總會(huì)有輸入密碼的提示,通過(guò)內(nèi)核分析得知Linux操作系統(tǒng)為了自身的安全考慮默認(rèn)阻止了公鑰的一次性生成,為了解決這個(gè)問(wèn)題我們使用了expect這個(gè)文件在編譯安裝后寫(xiě)入交互式腳本如下:
#!/usr/local/bin/expect –f
set timeout 80
set server “ ”
spawn ssh-keygen -t rsa
expect “Enter file in which to save the key (/root/.ssh/id_rsa):”
send “ ”
expect “Enter passphrase (empty for no passphrase):”
send “ ”
expect “Enter same passphase again:”
send “ ”
expect eof
exit
此時(shí)可以在運(yùn)行腳本后發(fā)現(xiàn)/root/.ssh/目錄下生成了密鑰文件,在寫(xiě)入shell腳本即可實(shí)現(xiàn)服務(wù)器之間的無(wú)密碼登錄。
此時(shí)我們已經(jīng)可以實(shí)現(xiàn)服務(wù)器之間的無(wú)密碼的登錄操作了,服務(wù)器可以實(shí)現(xiàn)降低之間消耗的操作了,于此同時(shí)我們需要將其寫(xiě)入RPM包中將其打包到分布式系統(tǒng)安裝軟件上去,從而實(shí)現(xiàn)分布式系統(tǒng)安裝過(guò)后的無(wú)人工干預(yù)操作。此時(shí)需要用到rpmbuild這個(gè)命令來(lái)完成RPM包得生成,可以編輯.spec文件來(lái)實(shí)現(xiàn)我們想要的在安裝操作過(guò)程中所需要的服務(wù)器,與此同時(shí)因?yàn)楹芏鄉(xiāng)inux服務(wù)器是默認(rèn)不支持expect軟件的所以需要把expect軟件安裝的整個(gè)過(guò)程寫(xiě)入RPM包得生成。故程序如下:
summary:tcl_exp
name:tcl_exp
Version:1.0.0
release:1
license:GPL
source: tcl_exp.tar.gz
group:system
%description
tcl_exp
%prep
%setup -c
%install
mkdir -p /home/tcl_exp
tar xvf /usr/src/redhat/SOURCES/tcl_exp.tar.gz -C /home/tcl_exp/
chmod 777 /home/tcl_exp/*
echo "start tar tcl"
tar -zxvf /home/tcl_exp/tcl_exp/tcl8.4.19-src.tar.gz -C /home/
tcl_exp/tcl_exp/
cd /home/tcl_exp/tcl_exp/tcl8.4.19/
cd unix
./configure --prefix=/expect
make
make install
tar -zxvf /home/tcl_exp/tcl_exp/expect-5.43.0.tar.gz -C /home/
tcl_exp/tcl_exp/
cd /home/tcl_exp/tcl_exp/expect-5.43/
./configure --with-tclinclude=/root/tcl8.4.19/generic/ --with-tclconfig=/
usr/local/lib
make
make install
%files
/usr/src/redhat/SOURCES/tcl_exp.tar.gz
/home/tcl_exp/tcl_exp/tcl8.4.19-src.tar.gz
/home/tcl_exp/tcl_exp/expect-5.43.0.tar.gz
%preun
應(yīng)用此種方法可以解決了在部署云存儲(chǔ)平臺(tái)時(shí)所面臨的一些問(wèn)題,實(shí)現(xiàn)了這些問(wèn)題雖然小但是卻極大的阻礙了存儲(chǔ)平臺(tái)的自動(dòng)化實(shí)施,因此不得不耗費(fèi)人力,并且這種方法可以擴(kuò)展到很多的計(jì)算平臺(tái)的應(yīng)用上。可以實(shí)現(xiàn)在安裝云存儲(chǔ)平臺(tái)前對(duì)于網(wǎng)絡(luò)架構(gòu)的自動(dòng)化檢測(cè),減少人的參與,從而提高效率,減少不要的麻煩。
參考文獻(xiàn)
[1]王勇.ParaStor:一種海量數(shù)據(jù)存儲(chǔ)系統(tǒng)(這個(gè)是一個(gè)技術(shù)文檔).
[2]張健.parastor使用說(shuō)明文檔.北京曙光科技有限公司(這個(gè)是一個(gè)技術(shù)文檔).
[3]曙光幵行存儲(chǔ)系統(tǒng).北京曙光科技有限公司.
[4]龔靖,雷俊智,龍洋.云存儲(chǔ)解析[M].人民郵電出版社.