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的文件)。
安装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 设备为例)
TFTP 服务器查看设备备份文件
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
网络设备备份配置文件
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
设备备份状态
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 更详细
监控项
注意:后续需要根据设备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
最新数据
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
最新数据
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 最新数据
——END——
本文分享自微信公众号 - 释然IT杂谈