Expect & Shell: 网络设备配置备份
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: 网络设备配置备份的更多相关文章
- 配置文件备份方案(expect+shell)
需求描述:备份所有线上服务器squid.httpd.mysql.nginx的配置文件 环境:在公司内网采用expect+shell脚本模式,进行批量备份.expect脚本通过ssh登录服务器,从本地c ...
- SHELL脚本自动备份Linux系统
今天来写一个使用shell脚本增量备份系统文件,顺便复习一下shell脚本相关的命令,这个脚本可以根据自己的需求来备份不同的文件或者文件夹,进行完整备份和增量备份.直接上脚本如下: #!/bin/sh ...
- 网络设备配置与管理(华为)基础系列 :VLAN故障排除和GVRP
一.VLAN故障排除 故障排除的三步骤:故障定位 → 分析故障 → 排除故障 一般情况下,网络设备配置的故障有两种排错方式 A.静态排错:主要靠display查看配置信息的方式进行 在相关vlan下d ...
- 思科网络设备配置AAA认证
思科网络设备配置AAA认证登陆,登陆认证后直接进入#特权模式,下面以Cisco 3750G-24TS-S为例,其他设备配置完全是一样的,进入config terminal后命令如下: 前面是加2个不同 ...
- shell 实现自动备份nginx下的站点
shell 实现自动备份nginx下的站点 优点 实现自动备份ngnix下的所有运行的站点 自定义排除备份站点,支持三种排除 自动维护备份目录,防止备份目录无限扩大 备份压缩tar.gz格式 源码: ...
- 利用shell脚本去备份幸运28源码搭建下载所指定的数据库
#! /bin/bash幸运28源码搭建下载Q[115288oo99]logintool=/home/yx/server/mysql/mysql/bin/mysqldumptool=/home/yx/ ...
- django小项目,使用paramiko自动备份网络设备配置
原来公司开发团队人员众多,有专门对接运维需求的开发人员,现在想要实现些功能可(只)以(能)自己写了-_- | 周末在家无事,用django搞个简单的功能练练手 django安装,配置 sudo p ...
- 使用SecureCRT脚本备份网络设备配置的一点感悟
https://blog.csdn.net/qq_25294171/article/details/85158458
- shell脚本:备份数据库、代码上线
备份MySQL数据库场景:一台MySQL服务器,跑着5个数据库,在没有做主从的情况下,需要对这5个库进行备份 需求:1)每天备份一次,需要备份所有的库2)把备份数据存放到/data/backup/下3 ...
随机推荐
- CF854C Planning优先队列|set
C. Planning 传送门 Helen works in Metropolis airport. She is responsible for creating a departure sched ...
- Essential C++学习笔记
1.当我们调用一个函数时,会在内存中建立起一块特殊区域,称为“程序栈”,这块特殊区域提供了每个函数参数的存储空间,它也提供函数所定义的每个对象的内存空间--我们将这些对象称为局部对象.一旦函数完成,这 ...
- Java零基础搭建实时直播平台
https://www.cnblogs.com/scywkl/p/12101437.html
- TensorFlow——TensorBoard可视化
TensorFlow提供了一个可视化工具TensorBoard,它能够将训练过程中的各种绘制数据进行展示出来,包括标量,图片,音频,计算图,数据分布,直方图等,通过网页来观察模型的结构和训练过程中各个 ...
- python打印图形
i = 0 while i < 5: # print('*****') 效果与下行相同 print('*'*5) i+=1 print('\n\n') i = 1 while i < 6: ...
- python关系(比较)运算符
关系运算符 就是 比较运算符 a.对象的值进行比较 数字间的比较运算符连着使用: 数字与True.False的比较True 表示 1 , False 表示 0 数字与字符串的比较(不能比较) 字符串间 ...
- Go的内存对齐和指针运算详解和实践
uintptr 和 unsafe普及 uintptr 在Go的源码中uintptr的定义如下: /* uintptr is an integer type that is large enough t ...
- CDQ 入门
推荐博客 :https://blog.csdn.net/wu_tongtong/article/details/78785836 https://www.cnblogs.com/mlystdcall/ ...
- Qt Installer Framework翻译(3-1)
初始化安装 下图说明了安装应用程序的默认工作流程: 本节使用在macOS上运行的Your Application Installer示例来说明默认工作流程.安装程序具有本地化外观,并可感知每个受支持的 ...
- 用Kolla在阿里云部署10节点高可用OpenStack
为展现 Kolla 的真正实力,我在阿里云使用 Ansible 自动创建 10 台虚机,部署一套多节点高可用 OpenStack 集群! 前言 上次 Kolla 已经表示了要打 10 个的愿望,这次我 ...