目标:
利用expect脚本自动抓取网络设备的配置数据,并保存到指定的ftp服务器上
准备工作:
1、一台Linux主机,确认已经安装了expect软件包,expect的文档到google上取查
2、一个已搭建好的ftp服务器
实例:
1台Cisco路由器,1台Huawei NE系列路由器和1台Huawei 6503交换机,并且6503不能直接telnet,需要通过NE路由器做跳板登录
脚本:
1、抓取Cisco路由器配置的脚本:get_cisco_conf.exp
#!/usr/bin/expect -f
if { $argc != 3 } { send_user "usage: get_cisco_conf.exp ip password enablepassword\n" exit }
set timeout 1 set TERM ANSI
set SERVER [lindex $argv 0] set PASSWD [lindex $argv 1] set ENPASSWD [lindex $argv 2]
spawn telnet expect "telnet> " send "open $SERVER\r" sleep 1 expect "Password:" send "$PASSWD\r" sleep 1 expect "*>" send "en\r" sleep 1 expect "Password:" send "$ENPASSWD\r" sleep 1 expect "*#"
send "show run\r" while (1) { sleep 1 expect { " --More-- " { send " " } "*#" { break } } } send "exit\r"
interact
|
2、抓取Huawei NE路由器配置的脚本:get_hwrtne_conf.exp
#!/usr/bin/expect -f
if { $argc != 3 } { send_user "usage: get_hwrtne_conf.exp ip user password\n" exit }
set timeout 1 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"
interact
|
3、抓取Huawei 6503交换机配置的脚本:get_hwsw6503_conf.exp,注意6503是通过NE路由器作为跳板登录的
#!/usr/bin/expect -f
if { $argc != 6 } { send_user "usage: get_hwsw6503_conf.exp ip user password swip swuser swpassword\n" exit }
set timeout 1 set TERM ANSI
set SERVER [lindex $argv 0] set USERNAME [lindex $argv 1] set PASSWD [lindex $argv 2]
set SWSERVER [lindex $argv 3] set SWUSERNAME [lindex $argv 4] set SWPASSWD [lindex $argv 5]
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 "telnet $SWSERVER\r" sleep 1 expect "Username:" send "$SWUSERNAME\r" sleep 1 expect "Password:" send "$SWPASSWD\r" sleep 1 expect "*>"
send "disp cur\r"
while (1) { sleep 1 expect { " ---- More ----" { send " " } "" { break } } } send "quit\r" sleep 1 expect "" send "quit\r"
interact
|
4、抓取并ftp到指定服务器的shell脚本:go.sh ,和上述脚本存放在同一目录下
#!/bin/sh
PATH="/sbin:/usr/sbin:/bin:/usr/bin" export PATH
#取系统当前时间,用来和设备IP组合起来做存档的文件名,格式:IP_日期时间.txt T=`date +%Y%m%d%H%M`
#cisco路由器的地址和密码 cisco_rt="1.1.1.1" cisco_rt_para="password enpass" #抓取配置并进行适当的处理滤掉各种控制字符 ./get_cisco_conf.exp $cisco_rt $cisco_rt_para | sed 's/ --More-- //g'| sed 's/\cM//g' | sed 's/\cH//g' | sed 's/ //g' > $cisco_rt"_"$T.txt
#Huawei路由器的地址和用户名、密码 huawei_rt="2.2.2.2" huawei_rt_para="user pass" #抓取配置并进行适当的处理滤掉各种控制字符 ./get_hwrtne_conf.exp $huawei_rt $huawei_rt_para | sed 's/\cM//g' | sed 's/ //g' | sed 's/---- More ----//g' | sed 's/\cG//g' | sed 's/[42D//g' > $huawei_rt"_"$T.txt
#Huawei交换机的地址和用户名、密码 huawei_sw="3.3.3.3" huawei_sw_para="user pass" #抓取配置并进行适当的处理滤掉各种控制字符 ./get_hwsw6503_conf.exp $huawei_rt $huawei_rt_para $huawei_sw $huawei_sw_para | sed 's/\cM//g' | sed 's/ //g' | sed 's/---- More ----//g' | sed 's/\cG//g' | sed 's/[42D//g' > $huawei_sw"_"$T.txt
#自动登录ftp服务器上传文件 ftp -nui<<EOF open ftp.server.ip user sysbackup password asc mput *_$T.txt close by EOF
#删除临时文件 rm -f *_$T.txt
|
阅读(1648) | 评论(0) | 转发(0) |