公司有几十台路由器,每周都要备份,并且备份格式要求如下:
地名_IP_日期_cfg.txt
这样的机械式劳动能不能利用linux脚本实现呢?答案是可以的:在网上找了一些资料,但只有一台路由的备份,多台路由器备份要怎么实现自动化呢?花了我将近我一周时间(本人比较笨,见笑了)在网上找资料终于搞定了,expect脚本用来处理交互方式还是蛮强大的,我就利用expect脚本来处理,代码如下:
1、利用expect+ssh方式备份:
#!/usr/bin/expect -f
set timeout 10
set Desip "192.168.5.10" #这是我tftp服务器IP
set pass "123*"
set Date [exec date +%Y.%m.%d]
array set IPDesFile {
"192.168.10.1" 深圳路由器
"192.168.11.1" 北京路由器
"192.168.15.1" 上海路由器
"192.168.16.1" 大连路由器
}
foreach {IP DesFile} [array get IPDesFile] {
spawn ssh admin@$IP
expect "yes/no" { send "yes\r" }
expect "password:" { send "$pass\r" }
if { $IP == "192.168.10.1" } {
expect ">" { send "save config from flash to tftp $Desip ${DesFile}_${IP}_${Date}.cfg.txt\r" }
} else {
expect ">" { send "save config from flash to tftp $Desip ${DesFile}_${IP}_${Date}.cfg.txt from bgroup0\r" }
}
expect { timeout 2 }
expect ">" {send "exit\r"}
}
spawn bash -c "mv /backup/tftp/*.txt /home/firewall/" #备份了配置文件将它们移动到另一个目录保存
expect eof;
2、利用bash+ftp备份:
另外,我还有几台交换机,利用ftp的方式来备份配置文件,下面是用bash方式实现的,我感觉下面的脚本应该可用数组、循环的方式实现,但是我没有找到好的方法,如果有朋友有好方法,请指教!
#!/bin/bash
cd /home/firewall
Filename=("switch1_2013_02_28.txt" "startup.cfg")
HOST=("192.168.20.1" "192.168.83.1")
USER=("admin" "admin2")
PASS=("123" "456")
Date=`date +%Y.%m.%d`
DesFile=("深圳_192.168.20.1_$Date.txt" "厦门_192.168.83.1_$Date.txt")
autoftp1(){
ftp -n ${HOST[0]} <<AUTOEOF
quote USER ${USER[0]}
quot PASS ${PASS[0]}
get ${Filename[0]} ${DesFile[0]}
binary
quit
AUTOEOF
}
autoftp1;
autoftp2(){
ftp -n ${HOST[1]} <<AUTOEOF
quote USER ${USER[1]}
quot PASS ${PASS[1]}
get ${Filename[1]} ${DesFile[1]}
binary
quit
AUTOEOF
}
autoftp2;
上面的脚本应该还有优化的空间(尤其是自动登录ftp的脚本),还请多多指点!承蒙感激!