洛陽光電技術(shù)發(fā)展中心 高佳林
?
針對linux服務器交互式自動化腳本實現(xiàn)與研究
洛陽光電技術(shù)發(fā)展中心 高佳林
【摘要】本文介紹了在linux服務器集群之間為了降低服務器之間由于linux操作系統(tǒng)的安全設置所帶來不必要的損耗,所以在linux集群服務器之間實現(xiàn)無密碼的SSH登錄,同時為了減少人工的干預把整個過程集成到集群的安裝過程中實現(xiàn).無密碼登錄SSH需要交互式腳本實現(xiàn),但是普通的linux服務器無法實現(xiàn)無人工干預的實現(xiàn)服務器之間生成公鑰的過程,所以需要用expect實現(xiàn)。并將其寫入RPM包中,實現(xiàn)安裝過程的全自動化。
【關(guān)鍵詞】無密碼;SSH登錄;RPM包
隨著信息技術(shù)的快速發(fā)展,本地應用逐步轉(zhuǎn)向網(wǎng)絡應用,高性能計算也由傳統(tǒng)的主機方式向網(wǎng)絡化集群演變,網(wǎng)絡存儲已經(jīng)占據(jù)了存儲系統(tǒng)的主流地位。伴隨著計算技術(shù)、網(wǎng)絡通信和信息儲存等各項技術(shù)取得的巨大進步,特別是高性能計算技術(shù)和應用軟件的快速發(fā)展,基于主機的存儲系統(tǒng)無法滿足應用系統(tǒng)的需求,傳統(tǒng)的網(wǎng)絡存儲設備,也日益成為整個應用系統(tǒng)的性能瓶頸。為了解決單個服務器系統(tǒng)在數(shù)據(jù)存儲等方面的瓶頸,提出了分布式存儲,即:數(shù)據(jù)和程序可以不位于一個服務器上,而是分散到多個服務器,以網(wǎng)絡上分散分布的地理信息數(shù)據(jù)及受其影響的數(shù)據(jù)庫操作為研究對象的一種理論計算模型服務器形式。分布式有利于任務在整個計算機系統(tǒng)上進行分配與優(yōu)化,克服了傳統(tǒng)集中式系統(tǒng)會導致中心主機資源緊張與響應瓶頸的缺陷,解決了網(wǎng)絡GIS 中存在的數(shù)據(jù)異構(gòu)、數(shù)據(jù)共享、運算復雜等問題,是系統(tǒng)技術(shù)的一大進步。
隨著高性能計算應用的深化以及非結(jié)構(gòu)化數(shù)據(jù)的爆炸性增長,以滿足并行I/O和結(jié)構(gòu)化數(shù)據(jù)I/O需求為目標的傳統(tǒng)存儲架構(gòu),在性能、可靠性、擴展性以及總體擁有成本上,已經(jīng)無法滿足跳躍性發(fā)展的高性能計算機及其配套的大型應用軟件的需求,存儲日益成為整個應用系統(tǒng)的性能瓶頸。通過增加磁盤數(shù)量、提升處理器性能和內(nèi)存容量等方法可以暫時緩解客戶對于性能的需求,但無法從根本上解決傳統(tǒng)架構(gòu)存儲系統(tǒng)的性能瓶頸問題,這就促使存儲系統(tǒng)的架構(gòu)必須做出改變。
1.1無密碼SSH登錄
首先需要保證系統(tǒng)環(huán)境已經(jīng)準備就緒。但是在實際的部署過程中,特別是大集群環(huán)境下,往往會因為個別節(jié)點的環(huán)境未準備就緒導致系統(tǒng)安裝部署的失敗,而依靠人工維護成本較高。為此,需要一個系統(tǒng)安裝環(huán)境檢測的自動化工具,實現(xiàn)系統(tǒng)安裝環(huán)境的自動化檢測,并根據(jù)檢測的結(jié)果報告進行相應的處理。在系統(tǒng)里各個服務器之間有很多數(shù)據(jù)的交互,如果還需要密碼來實現(xiàn)檢測訪問用戶就會有很大額外消耗,為了服務器之間訪問的方便,需要設置機器之間直接登陸而無需輸入登陸密碼。但是又為了保證服務器之間通信的安全性所以選擇用SSH服務,用交換公鑰方式來實現(xiàn)安全的無密碼登錄。
下面通過實驗實現(xiàn)兩臺模擬服務器之間的通信:有Server A,Server B通過一個交換機連接Server A的IP地址是192.168.0.1,而Server B的IP地址是192.168.0.2。
(1)從集群中選擇一臺服務器Server A,然后執(zhí)行sshkeygen–t rsa命令,在目錄~/root/.ssh目錄下生成id_rsa和id_rsa.pub密鑰對。
(2)將Server A上~/root/.ssh目錄下的文件authorized_keys、id_rsa拷貝到其它的服務節(jié)點的~/root/.ssh目錄下。
(3)將Server A上/etc/hosts文件拷貝到其它服務節(jié)點的/etc目錄下。
(4)從ServerA上使用命令“ssh IP地址”登錄其它的服務器節(jié)點,然后在其它的服務節(jié)點上刪除Server A的訪問記錄,操作方法是刪除其它服務器節(jié)點上/root/.ssh/known_hosts文件中關(guān)于ServerA的訪問記錄,以實現(xiàn)雙向的無密碼訪問。
(5)為了提高訪問效率,需要修改每臺服務器上的文件/etc/ssh/sshd_config,將其中的“UseDNS”的值改為“no”,即取消其前面的注釋符“#”,然后將“MaxStartups”的值設置更大的值,如100,并取消其前面的注釋符“#”。修改完后運行“/etc/init.d/sshd restart”讓配置文件生效。
(6)進行完上述的操作后,在每臺服務器上實行“ssh 192.168.0.1”操作,如果還需要輸入密碼,則執(zhí)行ssh-copy-id –i /root/.ssh/id_rsa.pub 192.168.0.1發(fā)送公鑰給192.168.0.1。
如此就可以實現(xiàn)服務器間無密碼訪問了。上述操作如圖1所示。

圖1
1.2自動化腳本
此時已經(jīng)可以實現(xiàn)服務器無密碼登錄但是我們要將其整個過程自動化實現(xiàn)。要實現(xiàn)的自動化過程是寫入sshkeygen–t rsa屏幕上輸出要求設定生成密鑰的目錄直接回車后選擇默認的目錄,然后屏幕會提示要求輸入互通的密鑰,依然回車選擇默認的空密碼。但通過實驗發(fā)現(xiàn)簡單的通過shell腳本無法一次性的自動生成密鑰文件,將上面的命令全部按照語法寫入shell腳本后運行時總會有輸入密碼的提示,通過內(nèi)核分析得知Linux操作系統(tǒng)為了自身的安全考慮默認阻止了公鑰的一次性生成,為了解決這個問題我們使用了expect這個文件在編譯安裝后寫入交互式腳本如下:
#!/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
此時可以在運行腳本后發(fā)現(xiàn)/root/.ssh/目錄下生成了密鑰文件,在寫入shell腳本即可實現(xiàn)服務器之間的無密碼登錄。
此時我們已經(jīng)可以實現(xiàn)服務器之間的無密碼的登錄操作了,服務器可以實現(xiàn)降低之間消耗的操作了,于此同時我們需要將其寫入RPM包中將其打包到分布式系統(tǒng)安裝軟件上去,從而實現(xiàn)分布式系統(tǒng)安裝過后的無人工干預操作。此時需要用到rpmbuild這個命令來完成RPM包得生成,可以編輯.spec文件來實現(xiàn)我們想要的在安裝操作過程中所需要的服務器,與此同時因為很多l(xiāng)inux服務器是默認不支持expect軟件的所以需要把expect軟件安裝的整個過程寫入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
應用此種方法可以解決了在部署云存儲平臺時所面臨的一些問題,實現(xiàn)了這些問題雖然小但是卻極大的阻礙了存儲平臺的自動化實施,因此不得不耗費人力,并且這種方法可以擴展到很多的計算平臺的應用上。可以實現(xiàn)在安裝云存儲平臺前對于網(wǎng)絡架構(gòu)的自動化檢測,減少人的參與,從而提高效率,減少不要的麻煩。
參考文獻
[1]王勇.ParaStor:一種海量數(shù)據(jù)存儲系統(tǒng)(這個是一個技術(shù)文檔).
[2]張健.parastor使用說明文檔.北京曙光科技有限公司(這個是一個技術(shù)文檔).
[3]曙光幵行存儲系統(tǒng).北京曙光科技有限公司.
[4]龔靖,雷俊智,龍洋.云存儲解析[M].人民郵電出版社.