公司有几十台路由器,每周都要备份,并且备份格式要求如下:

地名_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的脚本),还请多多指点!承蒙感激!