龙空技术网

So Cool 自动备份网管交换机配置文件到TFTP服务器

吃饭睡觉溜娃 831

前言:

目前小伙伴们对“开启telnet和tftp”大致比较看重,姐妹们都需要剖析一些“开启telnet和tftp”的相关资讯。那么小编也在网络上搜集了一些关于“开启telnet和tftp””的相关内容,希望各位老铁们能喜欢,看官们一起来了解一下吧!

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

一般常用的交换机,如思科的可以使用命令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/expectset 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 t\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服务器IPset username "admin"set password "XXXX"       #TFTP服务器telnet登录密码set path "/volume1/Department/IT/Public/TFTP"spawn telnet $hostexpect "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 $hostexpect "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 

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

然后我们再使用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”]

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

温馨提示: 命令字符串结尾别忘记加上“\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。

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

标签: #开启telnet和tftp