在網(wǎng)絡(luò)界瞎混這么多年,對(duì)路由器的認(rèn)識(shí)一直很渣:功能強(qiáng)大的網(wǎng)絡(luò)設(shè)備。支持強(qiáng)大OSPF、BGP、MPLS ×××等網(wǎng)絡(luò)路由協(xié)議,卻很少關(guān)注對(duì)它的日常運(yùn)維。直到后來接觸到linux,發(fā)現(xiàn)linux強(qiáng)大的腳本編程功能。學(xué)過linux之后再回來看路由器,特別是思科的IOS,頓悟:IOS就是尼瑪?shù)膌inux再次開發(fā)的,更確切的說應(yīng)該叫它Unix-like。
專注于為中小企業(yè)提供成都做網(wǎng)站、成都網(wǎng)站建設(shè)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)澗西免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了千余家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。既然,linux可以支持強(qiáng)大的腳本編程,如shell編程、python等實(shí)現(xiàn)系統(tǒng)的自動(dòng)化監(jiān)控、自動(dòng)化執(zhí)行任務(wù),那作為unix-like的IOS路由器是否也可以呢?如果可以實(shí)現(xiàn),是不是就不需要定期做巡檢采集配置文件、CPU利用率等重要信息備份工作了呢?
答案是肯定的,萬能的互聯(lián)網(wǎng)告訴我有一種叫expect的語言可以實(shí)現(xiàn)這個(gè)功能。對(duì)于這個(gè)語言簡(jiǎn)單解釋下:expect是一種交互式語言,通過expect期待一個(gè)內(nèi)容,然后用send下發(fā)要執(zhí)行的命令。這么說有點(diǎn)抽象,下面會(huì)舉例說明。(通過shell編程來實(shí)現(xiàn)telnet/ssh,無法實(shí)現(xiàn)自動(dòng)登錄及自動(dòng)執(zhí)行其他命令。如果哪位大俠覺得可以,跪求方法。)
------------------------------------------------廢話分割線------------------------------------------------------------------------------
例一:實(shí)現(xiàn)思科ASR9K路由器配置文件的自動(dòng)備份(華三、華為網(wǎng)絡(luò)設(shè)備也支持)
1、需要:linux主機(jī)一臺(tái)&TFTP服務(wù)器一臺(tái)(windows也可以),必須和路由器路由可達(dá)
2、思路:①寫expect腳本 ②寫crontab
3、步驟分解
一、寫expect腳本實(shí)現(xiàn)設(shè)備自動(dòng)登錄,并上傳配置文件到TFTP服務(wù)器
登錄到linux主機(jī):
vim asr9010.exp //創(chuàng)建并編輯一個(gè)expect文件,后綴名可寫成.exp
下面是asr9010.exp腳本內(nèi)容:
1 #!/usr/bin/expect //說明該腳本使用expect語言執(zhí)行
2 #backup device configuration to tftp server //注釋
3 set username getlog //創(chuàng)建變量username,賦值getlog
4 set password 123456 //創(chuàng)建變量password。這兩個(gè)變量用于路由器的登錄
5 set getlog "show running-config | file tftp://1.11.111.111/asr9010-huiyuan.cfg"
//設(shè)置變量getlog,賦值內(nèi)容為路由器上需要操作的一條命令,即:上傳配置文件到TFTP服務(wù)器
6 spawn telnet 1.11.111.112 //使用spawn創(chuàng)建一個(gè)進(jìn)程,并執(zhí)行telnet指令
7 sleep 1 //為避免命令執(zhí)行過快,休眠1秒
8 expect "username:" //若出現(xiàn)username:
9 send "$username\n" //輸入變量username的值,即getlog,就是路由器登錄的用戶名
10 sleep 1
11 expect "password:"
12 send "$password\n" //這里輸入登錄密碼
13 send "$getlog\n" //進(jìn)入系統(tǒng)之后,執(zhí)行變量getlog的值,即那一長(zhǎng)串命令
14 send "exit\n" //退出系統(tǒng)
15 expect eof //檢測(cè)執(zhí)行結(jié)束
16 exit //執(zhí)行結(jié)束,關(guān)閉進(jìn)程
用./asr9010.exp就可以執(zhí)行該腳本(記得修改執(zhí)行權(quán)限),運(yùn)行過程會(huì)直接顯示到屏幕上。
到TFTP上看下執(zhí)行路徑下就可以看到這個(gè)備份的配置文件啦(就不截圖了),如果哪天不幸路由器數(shù)據(jù)丟失,可直接通過TFTP直接get配置文件到路由器進(jìn)行數(shù)據(jù)恢復(fù)。
二、在linux主機(jī)上配置crontab,實(shí)現(xiàn)定期自動(dòng)執(zhí)行asr9010.exp腳本
crontab -e 進(jìn)入crontab編輯模式
0 5 * * 1 /home/devicelog/asr9010.exp //每周一早上凌晨5點(diǎn)準(zhǔn)時(shí)執(zhí)行/home/devicelog/目錄下的asr9010.exp腳本,大功告成。再也不用傻乎乎的手動(dòng)備份數(shù)據(jù)了。
--------------------------------------------------------我是一條分割線-------------------------------------------------------------
例二:自動(dòng)備份路由器上的重要配置如:靜態(tài)路由,并將備份內(nèi)容以郵件附件形式發(fā)送到指定郵箱。且,附件命名要求帶當(dāng)天日期,如route-20151105.txt
PS:方法與例一類似,就是需要在linux主機(jī)上配置郵件發(fā)送功能,expect結(jié)合bash、crontab可以共同完成。
時(shí)間有點(diǎn)晚,就不仔細(xì)寫了。直接上效果圖:
睡之前再廢話一句:執(zhí)行expect腳本時(shí)可以只用>重定向功能,這樣就不會(huì)在屏幕上輸出一大堆內(nèi)容。當(dāng)需要對(duì)輸出的內(nèi)容做過濾時(shí),重定向到文件后可以用sed\grep\awk對(duì)其進(jìn)行再次利用篩選。反正,linux就是只怕想不到?jīng)]有做不到的。
再再廢話一句:像思科一些IOS已經(jīng)支持很多l(xiāng)inux常用命令:egrep、vim、sort、uniq,etc。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。