在配置和维护一个大型的网络时,我们常常需要做一些重复性的劳动,在配置时我们往往是做一个配置模版文件,然后根据不同设备的要求进行相应的修改,最后将其通过拷贝和粘贴的方式输入Cisco的设备,这样思路清晰同时也不容易出错。
在维护过程中,我们往往需要远程登录到各个设备进行一些相关的配置,比如批量的修改所有设备的密码,如果手工的进行每台设备的修改即费时又容易出错,有没有更好的选择呢?其实我们可以通过以下几种方式实现自动的配置修改:
1、Ciscoworks2000配置自动分发方式;
2、终端脚本方式;
3、tclsh脚本方式;
4、windows脚本方式;

第1种方式,可以参考Ciscoworks2000的文档来配置;
第2种方式,是指有些终端程序支持各种脚本,比如SecureCRT支持VBScript和JScript两种脚本,因此我们可以通过相应的配置来完成批量的工作,具体的配置参加各种终端的说明;
第3种方式,是利用支持tclsh的IOS来实现的,它需要在支持tclsh的设备上(比如这里是r1)配置如下内容:
ip rcmd rsh-enable
ip rcmd remote-host r1 10.1.1.1 r1 enable
ip rcmd source-interface Loopback0
在其它需要被远程配置的设备上配:
ip rcmd rsh-enable
ip rcmd remote-host r1 10.1.1.1 r1 enable
这样凭空增加了一些工作量,而且还需要IOS的支持,否则无法实现;
第4种方式,是我们在这里要重点讨论的方法,它是采用windows脚本的方式。由于Windows脚本主机是系统自带的,我们不需要安装任何的其它软件就可以实现,而且VBS的脚本也很容易理解,所以它一般是解决问题的首选。下面我们来详细讲解一下:
目的:批量修改3个Cisco路由器的enable密码,将enable密码改为test,路由器的IP地址分别为10.1.1.1、10.1.1.2、10.1.1.3;
步骤1,我们建立一个名字叫做test.vbs的脚本;

'建立Shell对象
set sh=WScript.CreateObject("WScript.Shell")
WScript.Sleep 1000
'telnet到10.1.1.1路由器
sh.SendKeys "open 10.1.1.1"
WScript.Sleep 1000
sh.SendKeys "{ENTER}"
WScript.Sleep 1000
'输入该路由器的登录密码,这里为cisco
sh.SendKeys "cisco{ENTER}"
WScript.Sleep 1000
sh.SendKeys "enable{ENTER}"
WScript.Sleep 1000
'输入该路由器的enable密码,这里为cisco
sh.SendKeys "cisco{ENTER}"
WScript.Sleep 1000
'运行cisco的config term命令,进入配置模式
sh.SendKeys "config term{ENTER}"
WScript.Sleep 1000
'运行cisco的no enable password命令,清楚enable密码
sh.SendKeys "no enable password{ENTER}"
WScript.Sleep 1000
'运行cisco的enable password test命令,重设enable密码为test
sh.SendKeys "enable password test{ENTER}"
WScript.Sleep 1000
sh.SendKeys "exit{ENTER}"
WScript.Sleep 1000
'运行cisco的wr mem命令,保存配置
sh.SendKeys "wr mem{ENTER}"
WScript.Sleep 1000
sh.SendKeys "exit{ENTER}"
WScript.Sleep 1000
'给控制台输入一个空格符
sh.SendKeys "{ }"

WScript.Sleep 1000
'telnet到10.1.1.2路由器
sh.SendKeys "open 10.1.1.2"
WScript.Sleep 1000
sh.SendKeys "{ENTER}"
WScript.Sleep 1000
'输入该路由器的登录密码,这里为cisco
sh.SendKeys "cisco{ENTER}"
WScript.Sleep 1000
sh.SendKeys "enable{ENTER}"
WScript.Sleep 1000
'输入该路由器的enable密码,这里为cisco
sh.SendKeys "cisco{ENTER}"
WScript.Sleep 1000
'运行cisco的config term命令,进入配置模式
sh.SendKeys "config term{ENTER}"
WScript.Sleep 1000
'运行cisco的no enable password命令,清楚enable密码
sh.SendKeys "no enable password{ENTER}"
WScript.Sleep 1000
'运行cisco的enable password test命令,重设enable密码为test
sh.SendKeys "enable password test{ENTER}"
WScript.Sleep 1000
sh.SendKeys "exit{ENTER}"
WScript.Sleep 1000
'运行cisco的wr mem命令,保存配置
sh.SendKeys "wr mem{ENTER}"
WScript.Sleep 1000
sh.SendKeys "exit{ENTER}"
WScript.Sleep 1000
'给控制台输入一个空格符
sh.SendKeys "{ }"

WScript.Sleep 1000
'telnet到10.1.1.3路由器
sh.SendKeys "open 10.1.1.3"
WScript.Sleep 1000
sh.SendKeys "{ENTER}"
WScript.Sleep 1000
'输入该路由器的登录密码,这里为cisco
sh.SendKeys "cisco{ENTER}"
WScript.Sleep 1000
sh.SendKeys "enable{ENTER}"
WScript.Sleep 1000
'输入该路由器的enable密码,这里为cisco
sh.SendKeys "cisco{ENTER}"
WScript.Sleep 1000
'运行cisco的config term命令,进入配置模式
sh.SendKeys "config term{ENTER}"
WScript.Sleep 1000
'运行cisco的no enable password命令,清楚enable密码
sh.SendKeys "no enable password{ENTER}"
WScript.Sleep 1000
'运行cisco的enable password test命令,重设enable密码为test
sh.SendKeys "enable password test{ENTER}"
WScript.Sleep 1000
sh.SendKeys "exit{ENTER}"
WScript.Sleep 1000
'运行cisco的wr mem命令,保存配置
sh.SendKeys "wr mem{ENTER}"
WScript.Sleep 1000
sh.SendKeys "exit{ENTER}"
WScript.Sleep 1000
'给控制台输入一个空格符
sh.SendKeys "{ }"


步骤2,建立一个test.bat的批处理文件:

rem 启动telnet
start telnet.exe
rem batch telnet
cscript //nologo test.vbs


步骤3,我们只需要运行test.bat就可以轻松完成自动修改密码的工作了。

这里我们只是用telnet到cisco路由器上修改密码作为一个例子,其实通过这种方法我们可以完成许多配置工作,这就需要大家开动脑筋,在实践中去体验了。

对于SendKeys这个命令可以send什么,我们可以看下面的列表:

BACKSPACE {BACKSPACE}, {BS}, or {BKSP}
BREAK {BREAK}
CAPS LOCK {CAPSLOCK}
DEL or DELETE {DELETE} or {DEL}
DOWN ARROW {DOWN}
END {END}
ENTER {ENTER}or ~
ESC {ESC}
HELP {HELP}
HOME {HOME}
INS or INSERT {INSERT} or {INS}
LEFT ARROW {LEFT}
NUM LOCK {NUMLOCK}
PAGE DOWN {PGDN}
PAGE UP {PGUP}
PRINT SCREEN {PRTSC}
RIGHT ARROW {RIGHT}
SCROLL LOCK {SCROLLLOCK}
TAB {TAB}
UP ARROW {UP}
F1 {F1}
F2 {F2}
F3 {F3}
F4 {F4}
F5 {F5}
F6 {F6}
F7 {F7}
F8 {F8}
F9 {F9}
F10 {F10}
F11 {F11}
F12 {F12}
F13 {F13}
F14 {F14}
F15 {F15}
F16 {F16}

SHIFT +
CTRL ^
ALT %