命令交换机脚本怎么用(SoCool自动备份网管交换机配置文件到TFTP服务器)

你深眸似海蓝 科技 9

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

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

H3C的可以使用backup startup-configuration to

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

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

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

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

1、群辉设置部分

开启TFTP服务,开启telnet服务

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

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 所有的文件

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

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

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

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

172.16.1.66.expect

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

move.expect

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

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

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

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

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

[root@localhost expectFiles]# crontab -e #新增计划任务[root@localhost expectFiles]# crontab -l00 1 * * * /root/expectFiles/mkdir.expect /root/expectFiles/log.txt05 1 * * * /root/expectFiles/172.16.1.66.expect /root/expectFiles/log2.txt06 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”]

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

6. [interact]

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

Crontab用法

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

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

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

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

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

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

标签: 备份 执行 脚本

抱歉,评论功能暂时关闭!