TFTP

       TFTP(Trivial File Transfer Protocol,简单文件传输协议)也是用于在远端服务器和本地主机之间传输文件的,相对于FTP,TFTP没有复杂的交互存取接口和认证控制,适用于客户端和服务器之间不需要复杂交互的环境。TFTP协议的运行基于UDP协议,UDP 69 端口,使用UDP端口建立连接、收/发数据报文。

TFTP协议传输是由客户端发起的:

       · 当TFTP客户端需要从服务器下载文件时,由客户端向TFTP服务器发送读请求包,然后从服务器接收数据,并向服务器发送确认;

       ·  当TFTP客户端需要向服务器上传文件时,由客户端向TFTP服务器发送写请求包,然后向服务器发送数据,并接收服务器的确认。

TFTP传输文件有两种模式:

        ·  二进制模式,用于传输程序文件(比如后缀名为.bin和.btm的文件)。

        ·  ASCII码模式,用于传输文本格式的文件(比如后缀名为.txt、.bat和.cfg的文件)。

expect 批量备份网络设备配置文件_服务器


安装TFTP Server


yum -y install tftp-server xinetd


TFTP  Server 配置文件


cat  /etc/xinetd.d/tftpservice tftp{        socket_type             = dgram        protocol                = udp        wait                    = yes        user                    = root        server                  = /usr/sbin/in.tftpd        server_args             = -s -c /mnt/backup        disable                 = no        per_source              = 11        cps                     = 100 2        flags                   = IPv4}


创建 TFTP 存储目录赋予权限


mkdir   -p /mnt/backupchmod 777  -R /mnt/backup/


重启 xinetd 服务 (tftp服务是依赖于xinetd服务)


systemctl   restart xinetd


查看TFTP 服务端口


netstat  -auntlp  |grep 69udp        0      0 0.0.0.0:69              0.0.0.0:*                           20046/xinetd        udp6       0      0 :::69                   :::*                                1/systemd


Firewall 配置


firewall-cmd   --add-port=69/udp --permanentfirewall-cmd    --reload


登录网络设备测试推送配置文件到TFTP 服务器(H3C 设备为例)

expect 批量备份网络设备配置文件_数据_02

TFTP  服务器查看设备备份文件

expect 批量备份网络设备配置文件_数据_03

bash 脚本一

案例中使用 telnet 协议,生产环境多为ssh协议,根据实际环境修改脚本。


cat expect06.sh #!/usr/bin/bash
date=`date +%F`
cat /mnt/shell/ip.txt | while read ip username passworddo ping -c1 -W1 $ip &>/dev/null if [ $? -eq 0 ];then /usr/bin/expect <<-EOF set timeout 10 spawn telnet $ip expect "Username:" { send "$username\n" } expect "Password:" { send "$password\n" } expect ">" { send "tftp 172.18.30.27 put startup.cfg startup.cfg_${date}_$ip\n" } expect ">" { send "quit\n" } expect eof EOF else echo -e "\e[1;33m$ip ICMP Ping Unavailable...\e[0m" fidone


赋予可执行权限


chmod a+x expect06.sh


文本文件内容


cat ip.txt 172.18.1.30 username  password172.18.1.14 username  password


expect 批量备份网络设备配置文件_数据_04


网络设备备份配置文件

expect 批量备份网络设备配置文件_服务器_05


bash 脚本二

将网络设备备份状态重定向到文本文件


cat expect07.sh #!/usr/bin/bash
date=`date +%F`
cat /mnt/shell/ip.txt | while read ip username passworddo ping -c1 -W1 $ip &>/dev/null if [ $? -eq 0 ];then /usr/bin/expect <<-EOF set timeout 5 spawn telnet $ip expect "Username:" { send "$username\n" } expect "Password:" { send "$password\n" } expect ">" { send "tftp 172.18.30.27 put startup.cfg startup.cfg_${date}_$ip\n" } expect ">" { send "quit\n" } expect eof EOF else echo -e "\e[1;33m$ip ICMP Ping Unavailable...\e[0m" fi
if [ -e /mnt/backup/startup.cfg_${date}_$ip ];then echo "$date $ip success" >>/mnt/shell/device.txt else echo "$date $ip failed" >>/mnt/shell/device.txt
fidone


赋予可执行权限


chmod a+x expect07.sh


文本文件内容


cat ip.txt 172.18.1.30 username  password172.18.1.14 username  password172.18.1.114 username  password


expect 批量备份网络设备配置文件_服务器_06

设备备份状态


cat device.txt 2020-12-15 172.18.1.13 success2020-12-15 172.18.1.14 success2020-12-15 172.18.1.114 failed



Zabbix 实现对网络设备备份状态监控

zabbix_sender 参数介绍

-c --config 配置文件绝对路径

-z --zabbix-server zabbix server的IP地址

-p --port zabbix server端口.默认10051

-s --host 主机名,zabbix里面配置的主机名(不是服务器的hostname),不能使用ip地址

-I --source-address 源IP

-k --key 监控项的key

-o --value key值

-i --input-file 从文件里面读取hostname、key、value 一行为一条数据,使用空格作为分隔符,如果主机名带空格,那么请使用双引号包起来

-T --with-timestamps 一行一条数据,空格作为分隔符: ,配合 --input-file option,timestamp为unix时间戳

-r --real-time 将数据实时提交给服务器

-v --verbose 详细模式, -vv 更详细

监控项

expect 批量备份网络设备配置文件_数据_07

注意:后续需要根据设备IP地址新增监控项,保证监控项键值和主机的IP地址对应!!!

zabbix_sender 发送数据测试


zabbix_sender -z 172.18.30.27 -s Zabbix-server   -k "172.18.1.30" -o sucess -vvzabbix_sender [25857]: DEBUG: answer [{"response":"success","info":"processed: 1; failed: 0; total: 1; seconds spent: 0.000083"}]Response from "172.18.30.27:10051": "processed: 1; failed: 0; total: 1; seconds spent: 0.000083"sent: 1; skipped: 0; total: 1


最新数据

expect 批量备份网络设备配置文件_数据_08


zabbix_sender 读取文件


zabbix_sender -z 172.18.30.27  -i device.txt Response from "172.18.30.27:10051": "processed: 2; failed: 0; total: 2; seconds spent: 0.000095"sent: 2; skipped: 0; total: 2


文本文件内容


cat device.txt Zabbix-server 172.18.1.30 successZabbix-server 172.18.1.114 failed


最新数据

expect 批量备份网络设备配置文件_数据_09


bash 脚本三


cat  expect08.sh #!/usr/bin/bash
>/mnt/shell/device.txtdate=`date +%F`
host="Zabbix-server"cat /mnt/shell/ip.txt | while read ip username passworddo ping -c1 -W1 $ip &>/dev/null if [ $? -eq 0 ];then /usr/bin/expect <<-EOF set timeout 5 spawn telnet $ip expect "Username:" { send "$username\n" } expect "Password:" { send "$password\n" } expect ">" { send "tftp 172.18.30.27 put startup.cfg startup.cfg_${date}_$ip\n" } expect ">" { send "quit\n" } expect eof EOF else echo -e "\e[1;33m$ip ICMP Ping Unavailable...\e[0m" fi
if [ -e /mnt/backup/startup.cfg_${date}_$ip ];then echo "$host $ip success" >>/mnt/shell/device.txt else echo "$host $ip failed" >>/mnt/shell/device.txt
fidone
/usr/bin/zabbix_sender -z 172.18.30.27 -i device.txt


赋予可执行权限


chmod a+x expect08.sh


文本文件内容


cat ip.txt 172.18.1.30 username  password172.18.1.114 username  password


设备备份状态


cat device.txt Zabbix-server 172.18.1.30 successZabbix-server 172.18.1.114 failed


Zabbix 最新数据

expect 批量备份网络设备配置文件_客户端_10

——END——


本文分享自微信公众号 - 释然IT杂谈