接上篇“交换机定时自动备份配置文件的方法”,一个网络里因为各种原因,可能会有多种品牌、不同服役年限的交换机,并不是所有都能支持类似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"

expect "Password:"

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"

expect "switch name#"

send "exit\r"


可以看的出,基本就是一个交互的过程:系统反馈出现什么->发送什么命令。所以这个软件的名字也很贴切“expect"。如果有多台设备,就再增加几段脚本在文件内。

现在,配置已经可以定时备份了,为了把整个管理流程机制做的更完善,我把tftp+web server+expect都做在一个系统上,expect把配置通过tftp传到本地,web服务端可以对配置文件进行编辑、删除、下载等操作。为了安全起见,再设置一下iptables,只允许特定网段tftp传输、web管理,毕竟tftp是个不×××全的协议,只要有地址、文件名都可以上传下载。


最终成型:

系统、网络运维好帮手:expect_第1张图片

题外话:expect在这里的脚本应用只是它一小部分的功能,在实现了所需要的后,我就浅尝辄止了。对于其变量、一致性检查、判断等等,还有待我继续学习。




博主点评:

expect工具让我想到了pexpect工具,这两者相似,后者是expect的一个python实现。

参考博文:Pexpect自动交互系统