模拟人机交互实现数据设备配置批量备份

作为网络管理员,在日常工作中除要完成数据配置和网络维护外,还要定期备份所管理的数据设备的配置,这是一项必要但又枯燥的工作。通过利用Linux操作系统,模拟人机交互方式,定时批量的备份数据设备配置,从而提高了网络管理工作效率。

1、Expect介绍
Linux平台下,Telnet、crypt、su、rlogin等命令都有人机交互的接口,在对用户的身份进行验证时,如果用户不能输入正确的验证信息,程序就无法再运行下去。因此,这些程序在shell脚本中是无法自动执行的。Expert则可以描述程序和用户的对话,方便的以非交互的运行“交互式”的程序,Expect提供了创建交互式进程和读写它们的输入和输出的命令。
Expect是在Tcl基础上创建起来的,它还提供了一些Tcl所没有的命令。Spawn命令激活一个Unix程序来进行交互式的运行。Send命令向进程发送字符串。Expect命令等待进程的某些字符串。Expect支持正规表达式并能同时等待多个字符串,并对每一个字符串执行不同的操作。Expect还能理解一些特殊情况,如超时和遇到文件尾。Expect命令和Tcl的Case命令的风格很相似。都是用一个字符串去匹配多个字符串。

2、利用Expect脚本抓取交换机配置
在编写脚本中,难点是在登录到设备、“输入”Dsp cu显示一屏配置后,如何继续显示后继配置,也就是脚本如何检测到一屏配置显示完毕。在脚本里,我用了一个循环语句,当检测到”----more—“或“Press any key to continue (Q to quit) ”时,脚本就自动向设备发送一个“ “(空格),让配置继续显示下去。到检测到<--*>或“#”时,程序退出循环语句。抓取交换机配置结束。
下面是我利用Expect抓取华为交换机配置的脚本(tt.exp):

#!/usr/bin/expect -f   
if { $argc != 3 } {   
        send_user "usage: tt.exp ip user password\n"   
        exit   
}   
set timeout 21   
set TERM ANSI   
set SERVER [lindex $argv 0]   
set USERNAME [lindex $argv 1]   
set PASSWD [lindex $argv 2]   
spawn telnet   
expect "telnet> "   
send "open $SERVER\r"   
sleep 1   
expect "Username:"   
send "$USERNAME\r"   
sleep 1   
expect "Password:"   
send "$PASSWD\r"   
sleep 1   
expect "*>"   
send "disp cur\r"   
while (1) {   
        sleep 1   
        expect {   
                " ---- More ----" { send " " }   
                "<*-*-*>" { break }   
        }   
}   
send "quit\r"   
expect eof
exit   
interact   

在脚本中,设备的IP地址、登录的账号和密码都用变量来定义,这样,脚本更有广泛性,就拿上面的脚本来说,可适用于华为全系列VRP(Versatile Routing Platform,通用路由平台)数通设备。测试时,只需用键入命令“expect text.exp IP地址 用户名 密码” 即可。
3.Shell程序实现配置文件保存
Shell是Linux操作系统的精髓所在,它类似于DOS下的command.com。它接收用户命令,然后调用相应的应用程序。同时它又是一种程序设计语言。作为命令语言,它交互式解释和执行用户输入的命令或者自动地解释和执行预先设定好的一连串的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高阶语言中才具有的控制结构,包括循环和分支。
其实,在此文中,Shell程序运用较少,实现配置文件保存到特定文件也是一个命令就可以了,如下所示:
“expect text.exp IP地址 用户名 密码 > 文件名”
下面为实现生成的Shell脚本(go.sh):

!/bin/sh   
PATH="/sbin:/usr/sbin:/bin:/usr/bin"   
export PATH   
T=`date +%Y%m%d%H%M`   
huawei_rt_para="xxxx" //设备登录账号
aa="xxxx"     //设备登录密码
ss=`date +%Y%m%d` //年月日
mkdir backup/$ss //年月日做为目录
huawei_rt="xx.xx.xx.xx" //数通设备的ip
expect tt.exp $huawei_rt $huawei_rt_para $aa>backup/$ss/$huawei_rt"_"$T.txt
huawei_rt="xx.xx.xx.xx"
expect tt.exp $huawei_rt $huawei_rt_para $aa>backup/$ss/$huawei_rt"_"$T.txt
huawei_rt="xx.xx.xx.xxx"
expect tt.exp $huawei_rt $huawei_rt_para $aa>backup/$ss/$huawei_rt"_"$T.txt

4.定时任务:

基于Linux内核的操作系统有许多,如Red Hat Linux(红帽),红旗Linux、SUSE Linux ,Turbo Linux等等,我采用的是Ubuntu操作系统,它完全遵从开源软件开发的原则;并且鼓励人们使用、完善并传播开源软件。也就是说Ubuntu目前是并将永远是免费的。
如果想在ubuntu中实现某个时间或者每隔多久自动执行某些操作,可以使用内置的cron服务,查询cron服务有没有运行可以使用:/etc/init.d/cron status。
在编辑cron服务时,编辑的内容有一些固定的格式和约定:

# m h dom mon dow command

具体意义表示:“分钟”“小时”“日期”“月份”“星期”“命令”,在某月(mon)的某天(dom)或者星期几(dow)的几点(h,24小时制)几分(m)执行某个命令(command),*表示任意时间。
在此编写的cron为:

0 5 1,15 * *   sh /home/caisir/go.sh

意思为每月1号和15号的凌晨5点0分,自动执行go.sh脚本。
在Ubuntu中安装Vsftp软件后,就可以轻松通过Ftp来查看备份文件了。保存结果如下所示(图中为2015年10月1日自动备份的数据配置文件):在这里插入图片描述
5.后记

这个是在2015年前做的东西了,现在通信基础运营商都有了自己的专业网管,专业网管可自动备份数据,这片文章的应用价值目前也就低了很多,但专业网管的大量应用是不是也抹杀了网络操作维护人员的创造性了呢,我也希望大家在评论区讨论一下。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值