從零開(kāi)始linux學(xué)習(xí)--expect腳本實(shí)現(xiàn)交換機(jī)批量配置(九)

????????上一節(jié)筆者完成了NTP服務(wù)器的搭建,并通過(guò)對(duì)交換機(jī)的配置在客戶端完成了時(shí)間校準(zhǔn)。但是同時(shí)遇到了一個(gè)很嚴(yán)重的問(wèn)題,筆者專網(wǎng)中有上百臺(tái)網(wǎng)絡(luò)交換機(jī),每個(gè)交換機(jī)都要同步ntp產(chǎn)生的重復(fù)勞動(dòng)簡(jiǎn)直讓筆者想拿頭撞墻。但需求永遠(yuǎn)在推進(jìn)技術(shù)學(xué)習(xí),秉持著想盡辦法偷懶的態(tài)度,筆者準(zhǔn)備通過(guò)一小段代碼來(lái)對(duì)網(wǎng)絡(luò)內(nèi)交換機(jī)進(jìn)行ntp server的配置。

????????整理一下現(xiàn)狀:1.交換機(jī)都處于專網(wǎng)中,筆者的服務(wù)器均可以直接訪問(wèn),無(wú)需代理設(shè)備;2.幾乎所有的交換機(jī)型號(hào)相同,也就是說(shuō)完成ntp的配置指令相同;3.所有交換機(jī)密碼相同;4.所有設(shè)備都可以telnet管理,端口均是默認(rèn)端口,唯一的區(qū)別就只有設(shè)備IP地址。

????????那筆者的思路就比較清楚了,首先有個(gè)指令配置的模板,其中包含了設(shè)備登陸、密碼輸入、配置指令及保存退出。其次定義一個(gè)IP地址的表單,對(duì)表單內(nèi)的IP地址進(jìn)行配置模板的重復(fù)執(zhí)行。

????????對(duì)于linux系統(tǒng)而已,大多數(shù)簡(jiǎn)短腳本都會(huì)采用bash來(lái)進(jìn)行編寫,而筆者之前嘗試過(guò)expect腳本編寫,感覺(jué)這個(gè)腳本語(yǔ)言對(duì)于初學(xué)者相對(duì)比較友好,因此這節(jié)筆者就通過(guò)expect來(lái)進(jìn)行功能實(shí)現(xiàn)。

????????登陸服務(wù)器,首先看一下服務(wù)器是否有bash和expect:

????????yum list installed | grep bash

????????yum list installed | grep expect

????????看到系統(tǒng)是自帶bash組件,但沒(méi)有expect,繼續(xù)按照以往的方式進(jìn)行軟件安裝:

????????yum list | grep expect

????????yum install expect.x86_64

????????完成軟件安裝。

????????查看一下yum把expect安裝到了哪里:

????????whereis expect

????????熟悉一下文件安裝的路徑。

????????下面筆者開(kāi)始一個(gè)初始化腳本的編寫,進(jìn)入文件夾

????????cd /var

????????筆者來(lái)新建一個(gè)文件夾用于儲(chǔ)存和管理腳本

????????mkdir expect

????????進(jìn)入筆者新建的文件夾

????????cd ./expect

????????開(kāi)始創(chuàng)建第一個(gè)shell文件

????????vi telnet.sh

????????編程語(yǔ)言第一步就是聲明語(yǔ)言,結(jié)合之前筆者看到的安裝路徑:

????????#!/usr/bin/expect

????????設(shè)置超時(shí)時(shí)間為3秒:

????????set timeout 3

????????繼續(xù)隨便找一臺(tái)交換機(jī)進(jìn)行測(cè)試:比如10.150.103.61,測(cè)試之前呢,筆者也先不拿ntp的相關(guān)配置來(lái)做操作,畢竟時(shí)間看起來(lái)比較麻煩。筆者用最簡(jiǎn)單、直觀可見(jiàn)的方式--修改交換機(jī)的名稱來(lái)測(cè)試:

? ? ? ? 插入一部分,編程的同時(shí)筆者先梳理一下交換機(jī)改名字的配置思路。

????????第一步telnet 10.150.103.61

????????執(zhí)行之后呢,交換機(jī)就需要輸入密碼,為了方便測(cè)試腳本筆者改為了簡(jiǎn)單好記的123456

????????輸入密碼之后呢,H3C交換機(jī)改個(gè)用戶名兩條簡(jiǎn)單指令:

????????system-view

????????sysname hbaitest1

????????保存退出:

????????quit

????????save

????????y


????????y

????????最后quit退出,就結(jié)束了~

????????如上交換機(jī)的配置指令已經(jīng)梳理清楚了,那就開(kāi)始腳本配置:

????????腳本配置的輕松愉快啊,spawn即是執(zhí)行了telnet的指令,之后expect會(huì)匹配密碼的輸入,完整匹配字符應(yīng)該是“Password:”前后兩個(gè)*表示字符“assword”前后匹配任意字符,這樣就匹配到了輸入密碼的界面。

????????后面的異常輕松,送密碼啊送指令啊,送完了之后interact腳本結(jié)束。

????????wq!

????????保存退出,下面筆者迫不及待的嘗試一下腳本的效果,運(yùn)行之前筆者先登錄這臺(tái)交換機(jī)設(shè)備,把它修改為原來(lái)的名字:hbai1

????????切換回服務(wù)器,執(zhí)行腳本。

????????./telnet.sh

????????提示權(quán)限不夠。直接給文件夾/var/expect賦予讀寫執(zhí)行權(quán)限

????????chmod –R 777 /var/expect

????????繼續(xù)運(yùn)行腳本

????????./telnet.sh

????????再看一下交換機(jī),名字已然變成了筆者修改過(guò)后的新名字。簡(jiǎn)簡(jiǎn)單單的腳本執(zhí)行完成了。

????????執(zhí)行完成后繼續(xù)把名字修改回來(lái):

????????筆者最初的目的達(dá)成了,可以通過(guò)腳本自動(dòng)修改交換機(jī)名稱,但是由于腳本是固定的IP地址(spawn telnet 10.150.103.61)無(wú)法做到修改多個(gè)設(shè)備。下一步,筆者就在上述腳本的基礎(chǔ)上進(jìn)行優(yōu)化設(shè)置。

????????一、增加輸入,使得IP地址不再固定;

????????常見(jiàn)腳本的輸入方式大約分為兩種,一種是交互式的,可以手動(dòng)輸入,不過(guò)一旦輸入內(nèi)容很多,輸入變量也會(huì)變成一件非常繁瑣的事情;另一種方便的方式就是新建一個(gè)文件,把所有需要管理的IP地址都加入其中。然后自動(dòng)讀取文件執(zhí)行就可以了。

????????很明顯在筆者現(xiàn)有的應(yīng)用場(chǎng)景下,第二種方式比較簡(jiǎn)便,筆者只需要把所有的交換機(jī)IP地址貼出來(lái)就可以了,思路上呢,就是首先讀取文件第一行IP地址,telnet進(jìn)行連接,執(zhí)行交換機(jī)修改的命令;讀取文件第二行IP地址…………直到讀取文件結(jié)束。很清晰,一個(gè)循環(huán)操作。

????????首先筆者新建一個(gè)文件來(lái)存儲(chǔ)IP地址:

? ? ? ? vi ip.txt

????????輸入幾個(gè)測(cè)試的IP地址

????????筆者新建一個(gè)腳本來(lái)測(cè)試下循環(huán):

????????vi read.sh

????????設(shè)置讀取文件位置和操作:setf [open ip.txt]

????????執(zhí)行一個(gè)循環(huán)while:while {1}

????????讀取字符串并寫入line變量中set line [gets $f]

????????輸出變量:puts “ipaddress is : $line”

? ? ? ? 判斷變量是否為空,文件讀取結(jié)束:??? if {[eof $f]} {? close $f?break? }

????????成功完成后輸出提示:successful

????????這樣一個(gè)簡(jiǎn)單的循環(huán)腳本就完成了,筆者執(zhí)行一下腳本來(lái)看看運(yùn)行結(jié)果:

????????./read.sh

????????不錯(cuò)~輸入結(jié)束,結(jié)果很理想。下面筆者要做的就是整合之前完成的兩個(gè)腳本,一邊讀取IP地址,一遍執(zhí)行筆者想要的配置操作。

????????二、增加循環(huán),使得腳本可以對(duì)多個(gè)設(shè)備執(zhí)行命令。

????????回顧一下循環(huán)的思路:

????????1.讀取文件;2.執(zhí)行循環(huán);3.讀取字符串寫入變量;4.輸出變量;5.變量為空循環(huán)結(jié)束。

????????回顧一下交換機(jī)配置更改的思路:

????????1>telnet一個(gè)IP地址;2>在輸入密碼界面輸入密碼;3>執(zhí)行命令;4>保存退出。

????????思路上就是將循環(huán)中的“4.輸出變量”替換為“1>--4>交換機(jī)配置更改”,這樣就輕松愉快的結(jié)束了。

? ? ? ? 開(kāi)始操作,將循環(huán)腳本read.sh復(fù)制為modify.sh

????????cp read.sh modify.sh

????????編輯腳本:vi modify.sh

????????將第四條輸出ip地址替換為telnet.sh腳本中的命令修改配置:

????????完整腳本如上。

????????找個(gè)測(cè)試環(huán)境,筆者把ip.txt的地址替換為可以訪問(wèn)的交換機(jī)地址:vi ip.txt

????????登陸這兩臺(tái)設(shè)備:

????????執(zhí)行腳本:./modify.sh

????????等待腳本執(zhí)行完成后,回到這兩臺(tái)交換機(jī)的管理界面,發(fā)現(xiàn)交換機(jī)名字已經(jīng)批量修改了~

? ? ? ? 到這里為止,筆者的執(zhí)行腳本已經(jīng)完成啦,以后的批量作業(yè)只需要將指令保存到腳本之中,并且維護(hù)交換機(jī)ip地址列表ip.txt就可以一鍵修改了~

????????可以看到,一個(gè)功能性腳本最重要的就是理清思路,知道分幾步完成,每步該做什么;同樣對(duì)于一個(gè)復(fù)雜的步驟可以將其拆解出來(lái),單獨(dú)使用一個(gè)腳本進(jìn)行實(shí)現(xiàn),最后再進(jìn)行腳本的整合。每個(gè)復(fù)雜腳本基本上基于輸入、輸出、變量、運(yùn)算符、注釋、流控制來(lái)進(jìn)行的,邏輯思路非常重要。



????????最后的最后,筆者優(yōu)化一下了腳本。參考之前的ip地址列表,筆者將地址單獨(dú)出了一個(gè)文件以便修改。同樣,筆者將需要執(zhí)行的命令也單獨(dú)出來(lái)一個(gè)文件,命名為command.txt??紤]到筆者最初的目的,將配置指令修改為上一節(jié)NTP相關(guān)配置。三個(gè)文件如下所示:

????????ip.txt

????????command.txt

????????modify.sh

????????利用如上腳本和兩個(gè)文件就可以實(shí)現(xiàn)網(wǎng)絡(luò)設(shè)備的批量telnet和ssh管理啦~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,694評(píng)論 19 139
  • 國(guó)家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說(shuō)閱讀 12,514評(píng)論 6 13
  • linux資料總章2.1 1.0寫的不好抱歉 但是2.0已經(jīng)改了很多 但是錯(cuò)誤還是無(wú)法避免 以后資料會(huì)慢慢更新 大...
    數(shù)據(jù)革命閱讀 13,335評(píng)論 2 33
  • DNS(domain name system)是用戶上網(wǎng)的基礎(chǔ)服務(wù),由于IP地址純數(shù)字的特點(diǎn),使得人們很難記住一個(gè)...
    嵩山奶熊閱讀 1,223評(píng)論 1 2
  • 彈鋼琴的手型問(wèn)題可謂爭(zhēng)議極大。先有武寧老師撰文:《手型,中國(guó)鋼琴教學(xué)的最大騙局》,后有王烈老師在此文章上分析回應(yīng)。...
    暖兒_8833閱讀 369評(píng)論 0 0

友情鏈接更多精彩內(nèi)容