Expect : 网络设备配置备份

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服务

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

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

#!/bin/bash
    #write by William_Guozi in 2017.9.4
    #循环读取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 0 ] && 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

编写expect脚本config_backup.expect

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

#!/usr/bin/expect -f
#设定使用的shell是expect
#第一个参数为设备的ip地址
set ip [lindex $argv 0]
#参数数组expect脚本可以接受从bash传递过来的参数.可以使用[lindex $argv n]获得,n从0开始,分别表示第一个,第二个,第三个....参数
#第二个参数为设备的用户名
set username [lindex $argv 1]
#第三个参数为设备的登录密码
set passwd [lindex $argv 2]
#第四个参数为设备的enable密码
set enpasswd [lindex $argv 3]
#时间戳
set year [exec date +%Y]
set month [exec date +%m] 
set day [exec date +%d]
#设定超时时间, timeout -1为永不超时, 单位默认是秒
set timeout 5
#调用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 "send "tftp 192.168.9.44 put vrpcfg.zip $ip.zip\n"
# interact
expect "#"
#退出
send "exit\n"
expect eof
exit

其中华三需要复制的配置文件为:startup.cfg(S5500以上系列)或者config.cfg(S3100系列),华为交换机配置文件为:vrpcfg.zip

设备信息表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: command not found"是一个错误提示,意味着在当前环境中找不到名为"expect"的命令。这通常发生在你尝试运行一个使用expect命令的脚本或命令时。 Expect是一个用于自动化交互式任务的工具,它可以模拟人类用户与系统之间的交互。它通常用于编写自动化脚本,例如自动登录远程服务器、自动执行命令等。 如果你遇到了"expect: command not found"错误,可能有以下几种原因和解决方法: 1. Expect未安装:你的系统可能没有安装Expect工具。你可以通过包管理器(如apt、yum、brew等)来安装Expect。例如,在Ubuntu上,你可以使用以下命令安装Expect: ``` sudo apt-get install expect ``` 2. Expect路径问题:如果你已经安装了Expect,但仍然遇到该错误,可能是因为Expect的可执行文件不在系统的PATH环境变量中。你可以通过将Expect的可执行文件路径添加到PATH中来解决这个问题。例如,在Linux系统上,你可以编辑`~/.bashrc`文件,并在其中添加以下行: ``` export PATH=$PATH:/path/to/expect ``` 然后保存文件并重新加载bash配置: ``` source ~/.bashrc ``` 3. Expect权限问题:如果你已经安装了Expect并且路径设置正确,但仍然遇到权限问题,可能是因为你没有执行Expect命令的权限。你可以尝试使用sudo来以管理员身份运行命令。 希望以上解答对你有帮助!如果你还有其他问题,请继续提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值