作为一名专业的运维,我们必须确保公司的网络在出现故障的时候能够第一时间恢复,当然,这取决于你有没有及时的做好备份,所以,配置文件的备份相当重要。

一般常用的交换机,如思科的可以使用命令copy startup-config TFTP:

H3C的可以使用backup startup-configuration to

目前比较新的交换机IOS还能使用系统自带的命令设置计划任务,但是网络设备型号众多,每个版本的配置又不尽相同,当网络规模达到一定数量,这些设置就显得较为繁琐,手动备份又不太现实。

之前在笔记本上面使用SecureCRT结合VBS脚本的方式定期对网络设备进行半自动备份,效果还是不错的,最近更换了电脑,又想着需要重新设置,较为麻烦,而且不能实现全自动备份,所以这次打算换一种方式,通过网上查找资料,决定采用Centos Expect的方式进行备份,实现的思路就是使用expect脚本,再通过Centos里面的crontab计划任务命令定期执行,自动将配置文件上传指定的TFTP服务器上归档保存。

如何复制交换机配置文件(SoCool自动备份网管交换机配置文件到TFTP服务器)(1)

本次案例用到的CentOS版本是CentOS linux release 7.2.1511

TFTP服务器为群辉NAS,开启了TFTP服务,并且需要开启了telnet服务

1、群辉设置部分

开启TFTP服务,开启telnet服务

如何复制交换机配置文件(SoCool自动备份网管交换机配置文件到TFTP服务器)(2)

如何复制交换机配置文件(SoCool自动备份网管交换机配置文件到TFTP服务器)(3)

如何复制交换机配置文件(SoCool自动备份网管交换机配置文件到TFTP服务器)(4)

开启服务后,测试下是否能通过telnet登录,登录成功

如何复制交换机配置文件(SoCool自动备份网管交换机配置文件到TFTP服务器)(5)

2、Centos设置部分

Centos系统的安装请自行百度,这边就不做详细说明,我们主要来讲expect的安装和使用方法

A、首先我们需要在Centos中通过yum来安装expect,使用命令yum intsall expect

yum install expect

B、实验中我们使用的是telnet服务来连接网管交换机,所以需要安装telnet服务

yum install telnet

安装完成后我们在/root/expectFiles的目录下新建了3个文件,需要对文件赋予执行权限,这里我直接chmod 777 所有的文件

如下图

如何复制交换机配置文件(SoCool自动备份网管交换机配置文件到TFTP服务器)(6)

172.16.1.66.expect #交换机的备份脚本

mkdir.expect #新建以年-月-日命名的文件夹

move.expect #将备份完成的文件转移到对应的文件夹

下面是3个文件里面的详细脚本

172.16.1.66.expect

#! /usr/bin/expect set host "172.16.1.66" #定义目标交换机地址 set username "cisco" #定义目标交换机登录用户名 set password "XXXX" #定义目标交换机登录密码 spawn telnet $host #telnet到目标交换机 expect "Username:" #匹配返回的字符串"Username" send "$username\r" #发送定义好的登录用户名并回车 expect "Password:" #匹配返回的字符串"Password" send "$password\r" #发送定义好的登录密码 send "copy startup-config tftp://X.X.X.X\r" #发送备份命令到交换机 X.X.X.X为TFTP服务器的地址 expect "Address or name" #匹配返回的字符串 send "\r" #回车确认 expect "Destination" send "\r" expect "172" send "quit\r" interact #结束脚本

mkdir.expect

#! /usr/bin/expect set host "X.X.X.X" #定义TFTP服务器IP set username "admin" set password "XXXX" #TFTP服务器telnet登录密码 set path "/volume1/Department/IT/Public/TFTP" spawn telnet $host expect "XXX login" #匹配返回的TFTP名称 send "$username\r" expect "Password:" send "$password\r" expect "admin@XXX" send "cd /volume1/Department/IT/Public/TFTP\r" expect "admin@XXX" send "mkdir `date %Y-%m-%d`\r" #使用mkdir命令新建以年-月-日命名的文件夹 expect "admin@AHYNAS01" send "exit\r" interact

move.expect

#! /usr/bin/expect set host "X.X.X.X" set username "admin" set password "XXXX" set path "/volume1/Department/IT/Public/TFTP" spawn telnet $host expect "XXX login" send "$username\r" expect "Password:" send "$password\r" expect "admin@XXX" send "cd /volume1/Department/IT/Public/TFTP\r" #进入对应的TFTP路径 expect "admin@XXX" send "mv $path/172.*.* $path/`date %Y-%m-%d`\r" #使用mv命令将TFTP目录下的备份文件全部转移到新创建的以日期命名的文件夹内 expect "admin@XXX" send "exit\r" interact

脚本编写完毕后逐个运行一遍脚本看看是否能够正常执行

[root@localhost expectFiles]# ./172.16.1.66.expect [root@localhost expectFiles]# ./mkdir.expect [root@localhost expectFiles]# ./move.expect

成功运行,备份文件已经自动备份并转移到对应的文件夹内

如何复制交换机配置文件(SoCool自动备份网管交换机配置文件到TFTP服务器)(7)

然后我们再使用crontab -e来创建计划任务,每天晚上1点钟执行备份,1点05分执行创建文件夹,1点06分执行备份文件归档,同时将日志追加到对应的log文件中,以便排错。

[root@localhost expectFiles]# crontab -e #新增计划任务 [root@localhost expectFiles]# crontab -l 00 1 * * * /root/expectFiles/mkdir.expect >>/root/expectFiles/log.txt 05 1 * * * /root/expectFiles/172.16.1.66.expect >>/root/expectFiles/log2.txt 06 1 * * * /root/expectFiles/move.expect >>/root/expectFiles/log3.txt

Except的简单用法

1. [#!/usr/bin/expect]

这一行告诉操作系统脚本里的代码使用那一个SHELL来执行。这里的expect其实和linux下的bash、windows下的cmd是一类东西。

注意:这一行需要在脚本的第一行。

2. [set timeout 30]

基本上认识英文的都知道这是设置超时时间的,现在你只要记住他的计时单位是:秒 。timeout -1 为永不超时

3. [spawn ssh -l username 192.168.1.1]

spawn是进入expect环境后才可以执行的expect内部命令,如果没有装expect或者直接在默认的SHELL下执行是找不到spawn命令的。所以不要用 “which spawn“之类的命令去找spawn命令。好比windows里的dir就是一个内部命令,这个命令由shell自带,你无法找到一个dir.com 或 dir.exe 的可执行文件。

它主要的功能是给ssh运行进程加个壳,用来传递交互指令。

4. [expect “password:”]

这里的expect也是expect的一个内部命令,有点晕吧,expect的shell命令和内部命令是一样的,但不是一个功能,习惯就好了。这个命令的意思是判断上次输出结果里是否包含“password:”的字符串,如果有则立即返回,否则就等待一段时间后返回,这里等待时长就是前面设置的30秒

5. [send “ispass\r”]

这里就是执行交互动作,与手工输入密码的动作等效。

温馨提示: 命令字符串结尾别忘记加上“\r”,如果出现异常等待的状态可以核查一下。

6. [interact]

执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了。如果没有这一句登录完成后会退出,而不是留在远程终端上。如果你只是登录过去执行

Crontab用法

如何复制交换机配置文件(SoCool自动备份网管交换机配置文件到TFTP服务器)(8)

在以上各个字段中,还可以使用以下特殊字符:

“*”代表所有的取值范围内的数字,如月份字段为*,则表示1到12个月;

“/”代表每一定时间间隔的意思,如分钟字段为*/10,表示每10分钟执行1次。

“-“代表从某个区间范围,是闭区间。如“2-5”表示“2,3,4,5”,小时字段中0-23/2表示在0~23点范围内每2个小时执行一次。

“,”分散的数字(不一定连续),如1,2,3,4,7,9。

其他问题大家可以留言,我们一起探讨!

,