接上篇“交換機定時自動備份配置檔案的方法”,一個網絡裡因為各種原因,可能會有多種品牌、不同服役年限的交換機,并不是所有都能支援類似kron或job指令,那這個時候隻有用到expect了,debian下安裝非常簡單,自帶源裡就有,直接 aptitude install expect即可,但有2個基本前提:libc6 (>= 2.3), tcl8.5 (>= 8.5.0),即便netinstall的精簡debian,也基本包含了這2個元件,安裝過程中不出錯,就可以忽略。
安裝完成後就可以直接運作設定的腳本了,腳本的權限至少得包含執行,我暫時把腳本設定為751的權限,因為要設定讓系統cron每天1點或2點定時運作它。
如何寫腳本,就像你如何與交換機進行互動操作一樣:登陸裝置->提示使用者名或密碼->輸入使用者名或密碼->特權模式->提示使用者名或密碼->輸入使用者名或密碼->拷貝配置到伺服器端->提示完成->退出登陸。
範例:
#!/usr/bin/expect
spawn telnet switch ip
expect "Password:"
send "telnet password\r"
expect "switch name>"
send "en\r"
send "enable password\r"
expect "switch name#"
send "copy startup-config tftp:\r"
expect "Address of remote host"
send "tftp server ip\r"
expect "Destination filename"
send "config file name\r"
send "exit\r"
可以看的出,基本就是一個互動的過程:系統回報出現什麼->發送什麼指令。是以這個軟體的名字也很貼切“expect"。如果有多台裝置,就再增加幾段腳本在檔案内。
現在,配置已經可以定時備份了,為了把整個管理流程機制做的更完善,我把tftp+web server+expect都做在一個系統上,expect把配置通過tftp傳到本地,web服務端可以對配置檔案進行編輯、删除、下載下傳等操作。為了安全起見,再設定一下iptables,隻允許特定網段tftp傳輸、web管理,畢竟tftp是個不×××全的協定,隻要有位址、檔案名都可以上傳下載下傳。
最終成型:
題外話:expect在這裡的腳本應用隻是它一小部分的功能,在實作了所需要的後,我就淺嘗辄止了。對于其變量、一緻性檢查、判斷等等,還有待我繼續學習。
部落客點評:
expect工具讓我想到了pexpect工具,這兩者相似,後者是expect的一個python實作。
本文轉自Grodd51CTO部落格,原文連結:http://blog.51cto.com/juispan/2045079,如需轉載請自行聯系原作者