1. 环境介绍及效果展示

A. centos 6.6 x64
B. tftp-server 0.49
C. 脚本目录

D. 备份目录

E. 备份邮件

2. tftp服务配置

A. [root@steppingstone ~]# yum install tftp-server -y #安装服务
B. [root@steppingstone ~]# vim /etc/xinetd.d/tftp #修改配置文件

service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s -c /backup #指定tftp目录
disable = no #开启服务
per_source = 11
cps = 100 2
flags = IPv4
}

C. [root@steppingstone ~]# mkdir /backup #创建tftp目录
D. [root@steppingstone ~]# chmod a+w -R /backup/ #添加读权限
E. [root@steppingstone ~]# chkconfig tftp on #开机自启
F. [root@steppingstone ~]# service xinetd restart #启动tftp服务

3. 编写调用expect的shell脚本backup.sh

A. [root@steppingstone backup]# vim backup.sh

     #!/bin/bash
#write by William_Guozi in 2017.9.
#循环读取device_tab.txt每一行内容, 格式: ip username passwd enpasswd
year=`date +'%Y'`
month=`date +'%m'`
day=`date +'%d'`
#创建备份目录
mkdir /backup/$year/$month/$day -p
#给备份目录添加写权限
chmod a+w -R /backup
for ip in `awk '{print $1}' device_tab.txt`
do
#读取该IP设备的 username passwd enpasswd
username=`awk -v IP="$ip" '{if(IP==$1)print $2}' device_tab.txt`
passwd=`awk -v IP="$ip" '{if(IP==$1)print $3}' device_tab.txt`
enpasswd=`awk -v IP=$ip '{if(IP==$1)print $4}' device_tab.txt`
#向expect脚本传送四个参数username ip passwd enpasswd
expect config_backup.expect $ip $username $passwd $enpasswd
#判断是否执行成功, 执行结果记入日志
#[ $? -eq ] && echo "Device $ip backup Success!">> logname.txt || echo "Device $ip backup Failure!">> logname.txt
#判断备份文件是否存在, 存在, 则备份成功, 否则, 本分失败
[ -e /backup/$year/$month/$day/D-$ip ] && echo "Device $ip backup Success!">> logname.txt || echo "Device $ip backup Failure!">> logname.txt
done
#将日志信息发送邮件通知管理员
cat logname.txt | mail -s "Backup Result Reports" guojxb@wumart.com
#将日志送至垃圾箱
mv logname.txt /tmp/logname-`date +'%F'`.txt

backup.sh

4. 编写expect脚本config_backup.expect

A. [root@steppingstone backup]# vim config_backup.expect

 #!/usr/bin/expect -f
#设定使用的shell是expect
#第一个参数为设备的ip地址
set ip [lindex $argv ]
#参数数组expect脚本可以接受从bash传递过来的参数.可以使用[lindex $argv n]获得,n从0开始,分别表示第一个,第二个,第三个....参数
#第二个参数为设备的用户名
set username [lindex $argv ]
#第三个参数为设备的登录密码
set passwd [lindex $argv ]
#第四个参数为设备的enable密码
set enpasswd [lindex $argv ]
#时间戳
set year [exec date +%Y]
set month [exec date +%m]
set day [exec date +%d]
#设定超时时间, timeout -1为永不超时, 单位默认是秒
set timeout
#调用ssh登录
spawn ssh -l $username $ip
#对返回值的可能性进行判断, 如果是"yes/no"就回送yes\n,再回送登录密码; 如果是password, 就回送登录密码
expect {
"yes/no" {
send "yes\n"
expect "password"
send "$passwd\n"
}
"password" {
send "$passwd\n"
}
}
expect ">"
#回送enable命令
send "enable\n"
expect "Password"
#回送enable密码
send "$enpasswd\n"
expect "#"
#回送备份命令
send "copy startup-config tftp://192.9.205.111/$year/$month/$day/D-$ip\n"
# interact
expect "#"
#退出
send "exit\n"
expect eof
exit

config_backup.expect

5. 设备信息表device_tab.txt

A. [root@steppingstone backup]# vim device_tab.txt

1.1.15.5 root xxxxx xxxxxx
1.1.16.6 root xxxxx xxxxxx
1.1.18.8 root xxxxx xxxxxx
1.1.17.7 root xxxxx xxxxxx
1.1.19.9 root xxxxx xxxxxx

6. 设定定时任务

A. corntab -e

SHELL=/bin/bash
#指定环境变量
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
#指定工作目录
HOME=/root/backup
00 16 * * * bash backup.sh >> /var/log/backup.log

Expect & Shell: 网络设备配置备份的更多相关文章

  1. 配置文件备份方案(expect+shell)

    需求描述:备份所有线上服务器squid.httpd.mysql.nginx的配置文件 环境:在公司内网采用expect+shell脚本模式,进行批量备份.expect脚本通过ssh登录服务器,从本地c ...

  2. SHELL脚本自动备份Linux系统

    今天来写一个使用shell脚本增量备份系统文件,顺便复习一下shell脚本相关的命令,这个脚本可以根据自己的需求来备份不同的文件或者文件夹,进行完整备份和增量备份.直接上脚本如下: #!/bin/sh ...

  3. 网络设备配置与管理(华为)基础系列 :VLAN故障排除和GVRP

    一.VLAN故障排除 故障排除的三步骤:故障定位 → 分析故障 → 排除故障 一般情况下,网络设备配置的故障有两种排错方式 A.静态排错:主要靠display查看配置信息的方式进行 在相关vlan下d ...

  4. 思科网络设备配置AAA认证

    思科网络设备配置AAA认证登陆,登陆认证后直接进入#特权模式,下面以Cisco 3750G-24TS-S为例,其他设备配置完全是一样的,进入config terminal后命令如下: 前面是加2个不同 ...

  5. shell 实现自动备份nginx下的站点

    shell 实现自动备份nginx下的站点 优点 实现自动备份ngnix下的所有运行的站点 自定义排除备份站点,支持三种排除 自动维护备份目录,防止备份目录无限扩大 备份压缩tar.gz格式 源码: ...

  6. 利用shell脚本去备份幸运28源码搭建下载所指定的数据库

    #! /bin/bash幸运28源码搭建下载Q[115288oo99]logintool=/home/yx/server/mysql/mysql/bin/mysqldumptool=/home/yx/ ...

  7. django小项目,使用paramiko自动备份网络设备配置

    原来公司开发团队人员众多,有专门对接运维需求的开发人员,现在想要实现些功能可(只)以(能)自己写了-_- |   周末在家无事,用django搞个简单的功能练练手 django安装,配置 sudo p ...

  8. 使用SecureCRT脚本备份网络设备配置的一点感悟

    https://blog.csdn.net/qq_25294171/article/details/85158458

  9. shell脚本:备份数据库、代码上线

    备份MySQL数据库场景:一台MySQL服务器,跑着5个数据库,在没有做主从的情况下,需要对这5个库进行备份 需求:1)每天备份一次,需要备份所有的库2)把备份数据存放到/data/backup/下3 ...

随机推荐

  1. eclipse maven工程错误总汇

    1.问题: Target runtime Apache Tomcat v7.0 is not defined 解决方法:           right click on your project & ...

  2. MariaDB的备份与主从、高可用实践

    1.编写脚本,支持让用户自主选择,使用mysqldump还是xtraback全量备份. [root@test-centos7-node1 scripts]# cat chose_backup_mysq ...

  3. shell学习-常用语句

    为什么使用shell 可以快速.简单的完成编程,实现自己的想法.Shell非常适合编写小的工具,因为小工具更强调的是易于配置.维护.移植等,而不是执行效率. 当自己的想法确实有必要进行优化,有必要让它 ...

  4. ubuntu频繁死机--独立显卡问题

    问题:笔记本安装ubuntu时以及装好后有时会出现花屏.死机的问题,系统报错 *ERROR* UVD not responding, trying to reset the VCPU!!! *ERRO ...

  5. cannot mount volume over existing file, file exists /var/lib/docker/overlay2/.../merged/usr/share/zoneinfo/UTC 解决

    问题产生原因: linux系统docker-compose.yml文件 放到 mac本启动发现启动报错 cannot mount volume over existing file, file exi ...

  6. Go 每日一库之 go-ini

    简介 ini 是 Windows 上常用的配置文件格式.MySQL 的 Windows 版就是使用 ini 格式存储配置的. go-ini是 Go 语言中用于操作 ini 文件的第三方库. 本文介绍g ...

  7. ubuntu下打开html页面

    相信遇到这个问题的各位都是闲人,所以肯定是有时间的,网上打开html教程很多,但是就不吐槽了emmm... 详细信息不在此篇幅,网络资源,我就不重复了,看着很烦的,见附录 下面进入正题 这个配置玩过的 ...

  8. CSP-S rp++

    心无旁骛 认真思考 努力骗分(哈哈) I Love CSP! 反正像我这种大菜鸟也考不了多少 尽力打 本次考试期望 day1 100 70-100 30-? day2 100 ? ? 总:300-? ...

  9. Springboot引入本地jar时打包

    在项目的开发过程中有时我们需要引入我们本地的jar包,这些jar包没有存在maven仓库中 ,这时没有办法通过pom文件直接引入,在开发过程中我们可以通过add as library的方式,可以在开发 ...

  10. python接口测试,mock模块基本使用介绍

    mock简介 py3已将mock集成到unittest库中 为的就是更好的进行单元测试 简单理解,模拟接口返回参数 通俗易懂,直接修改接口返回参数的值 mock作用 解决依赖问题,达到解耦作用 当我们 ...