利用expect来实现非交互式备份现网网络设备配置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用expect来实现非交互式备份现网网络设备配置相关的知识,希望对你有一定的参考价值。

环境:
网络设备(客户端):192.168.1.11;192.168.1.12
tftp sever:192.168.1.50
Linux 备份服务器:192.168.1.50

操作前:
1)、关闭防火墙及Selinux
2)、提前配置好网络设备telnet功能,同时确保该账户有tftp 备份设备配置文件的权限。如下案例中网络设备作为客户端的telnet账户及密码均为admin

操作步骤:
1、安装tftp server、 xinetd 、expect
yum install -y xinetd tftp-server
2、编辑xinetd下的tftp-server
配置tftp server
vim /etc/xinetd.d/tftp
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /var/lib/tftpboot -c
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}

重启xinet服务并确认tftp server是否启动
service xinetd restart
netstat -tlunp | grep 69
udp 0 0 0.0.0.0:69 0.0.0.0:* 1499/xinetd

3、编辑expect脚本
vim back_expect.exp
set timeout 60
set ip [lindex $argv 0]
set username [lindex $argv 1]
set password [lindex $argv 2]
spawn telnet $ip
expect -re "login:|Username:"
send "$username "
expect "Password:"
send "$password "
expect ">"
send "tftp 192.168.1.50 put startup.cfg "
expect "
>"
send "quit "
expect eof

编辑备份H3C设备配置的脚本
vim h3c_back.sh
#!/bin/bash
while read ip username password
do
/usr/bin/expect /script/data/backexpect.exp $ip $username $password > /dev/null
if [ -e /var/lib/tftpboot/startup.cfg ];then
mv /var/lib/tftpboot/startup.cfg /tmp/$(date +%F)
${ip}.cfg
echo "$ip put sucess"
else
echo "$ip backup failed"
fi
done </tmp/1.txt

网络设备的地址、telnet账户、telnet密码
/tmp/1.txt
192.168.1.11 admin admin
192.168.1.12 admin admin

执行结果
sh h3c_back.sh

ll /tmp/
总用量 72
-rw-rw-rw- 1 nobody nobody 6623 12月 17 00:17 2019-12-17_192.168.1.11.cfg
-rw-rw-rw- 1 nobody nobody 6617 12月 17 00:17 2019-12-17_192.168.1.12.cfg

确认备份目录下的网络设备配置文件是否正确
less /tmp/2019-12-17_192.168.1.11.cfg

version 7.1.075, H3C

sysname R1

telnet server enable

irf mac-address persistent timer
irf auto-update enable
undo irf link-delay
irf member 1 priority 1

lldp global enable

system-working-mode standard
xbar load-single
password-recovery enable
lpu-type f-series

vlan 1

interface NULL0

interface LoopBack0
ip address 1.1.1.1 255.255.255.255

interface Vlan-interface1
ip address 192.168.1.11 255.255.255.0


同理,备份Cisco、HUAWEI设备方法类似,这里不再一 一举例,具体脚本可参考如下:

HUAWEI:

vim hw_back_expect.exp
#!/usr/bin/expect
set timeout 60
set ip [lindex $argv 0]
set username [lindex $argv 1]
set password [lindex $argv 2]
spawn telnet $ip
expect -re "login:|Username:"
send "$username "
expect "Password:"
send "$password "
expect ">"
send "tftp 192.168.1.50 put vrpcfg.zip "
expect "
>"
send "quit "
expect eof

vim hw_back.sh
#!/bin/bash
while read ip username password
do
/usr/bin/expect /script/data/hw_backexpect.exp $ip $username $password > /dev/null
if [ -e /var/lib/tftpboot/vrpcfg.zip ];then
mv /var/lib/tftpboot/vrpcfg.zip /tmp/$(date +%F)
${ip}.cfg
echo "$ip put sucess"
else
echo "$ip backup failed"
fi
done </tmp/2.txt


Cisco:

cisco_expect.exp
#!/usr/bin/expect
set timeout 60
set ip [lindex $argv 0]
set username [lindex $argv 1]
set password [lindex $argv 2]
spawn telnet $ip
expect -re "login:|Username:"
send "$username "
expect "Password:"
send "$password "
expect "#"
send "copy startup-config tftp://192.168.1.50/$ip.cfg "
send " "
send " "
expect "
end"
send "exit "
expect eof

vim cisco_back.sh
#!/bin/bash
while read ip username password
do
/usr/bin/expect /script/data/ciscoexpect.exp $ip $username $password > /dev/null
if [ -e /var/lib/tftpboot/${ip}.cfg ];then
mkdir -p /tmp/$(date +%F)
mv /var/lib/tftpboot/${ip}.cfg /tmp/$(date +%F)/$(date +%F)
${ip}.cfg
echo "$ip put sucess"
else
echo "$ip backup failed"
fi
done </tmp/3.txt


初学shell,脚本难免有错误之处,欢迎大家指正! -------一只初学Linux的网络运维工程师,网络技术问题可联系QQ:1656209309

以上是关于利用expect来实现非交互式备份现网网络设备配置的主要内容,如果未能解决你的问题,请参考以下文章

利用expect和sshpass完美非交互性执行远端命令

使用expect实现异机备份

expect实现非交互

5-1Expect实现scp非交互传输文件

Expect实现ssh非交互登录

expect知识梳理