部署位置
交换机配置存储位置/tftp
copy脚本位置/copy_config_switch
同步周期:15天
执行命令:nohup sh do_copy_stat-config &
开机自启动jiankong1
环境:
tftp-server
执行脚本
安装linux版本的tftp-server
安装tftp服务器
yum -y install xinetd
yum -y install tftp
yum -y install tftp-server
配置tftp服务器
修改/etc/xinetd.d/tftp文件,将其中的disable=yes改为disable=no。 主要是设置TFTP服务器的根目录,开启服务。修改后的文件如下:
service tftp
{ socket_type =dgram
protocol =udp
wait =yes
user =root
server =/usr/sbin/in.tftpd
server_args =-s /tftp -c
disable =no
per_source =11
cps =100 2
flags =IPv4
}
说明:修改项server_args= -s -c,其中此处可以改为你的tftp-server的根目录,参数-s指定chroot,-c指定了可以创建文件。
创建/tftp
mkdir /tftp
chmod 777 /tftp
启动tftp服务器并关闭防火墙
service iptables stop
service xinetd restart
看到启动[OK]就可以了
查看tftp服务是否开启
netstat -a | grep tftp
显示结果为
udp 0 0 :tftp *:
表明服务已经开启,就表明tftp配置成功了。
交换机配置
配置低等级账号
ios:
username user privilege 5 password 0 test@2018!
nexus:
username user password 5 test@2018! role priv-0
查看命令:
show running-config | include username
给低等级用户赋权
ios:
privilege exec level 5 copy running-config tftp:
privilege exec level 5 copy startup-config tftp:
查看命令:
show running-config | include privilege
nexus:
role name priv-0
rule 11 permit command copy running-config tftp:
rule 12 permit command copy startup-config tftp:
查看命令:
show role name priv-0
配置tftp的源ip(选配)
ip tftp source-interface loopback 1
注:
交换机在发送tftp数据包的时候以最近的端口进行传输,源ip是接口ip,以udp数据包发送,如果出接口无法被server段路由到,可能导致数据无法传输,只能收到一个包,只能显示文件名,但是没有内容。此命令是更改tftp数据包的源ip,保证和server端能够顺利通讯。如果可以和server端正常通讯,则可以不用配置。
交换机配置备份脚本
**环境:**需要安装expect
命令:
yum -y install expect*
copy_stat-config:
使用示例:
./copy_stat-config 10.203.40.2 shanghai_config ssh user@
./copy_stat-config 10.200.200.2 guomao_config telnet
注:
telnet直接接ip,ssh需要使用用户名,否则默认用root登陆cisco设备。所以示例中telnet后边没有参数。而ssh后边需要使用user@。
#!/usr/bin/expect
#!/bin/bash
set host_ip [lindex $argv 0]
set filename_config [lindex $argv 1]
set login_commend [lindex $argv 2]
set username [lindex $argv 3]
set timeout 10
spawn $login_commend $username$host_ip
expect {
"Username" {send "user\n"; exp_continue}
"*yes/no" { send "yes\r"; exp_continue}
"Password:" { send "test@2018!\n" }
}
expect "#"
send "copy startup-config tftp:\n"
expect {
"*filename" {send "$filename_config\n"; exp_continue}
"*vrf" { send "\n"; exp_continue}
"*host" { send "10.201.81.90\n"; exp_continue }
"*bytes*" { send "\n" }
"successful" { send "\n" }
}
#set log_test log:[exec date -d yesterday "+%Y-%m-%d-%H-%S"]
#set log_test [lindex $argv 0]
#log_file $log_test
#expect "successful"
#expect "#"
exit
do_copy_stat-config:
使用示例:
sh do_copy_stat-config
注:
do_copy_stat-config调用copy_stat-config,并传一些参数,这里分为ssh和telnet两种情况。
#!bin/bash
host_ip_ssh=(10.200.200.231 10.200.200.234 10.200.200.236 10.200.200.250 10.200.200.253 10.200.200.5 10.200.200.8 10.201.0.2 10.201.0.3 10.202.0.2 10.202.0.3 10.202.0.4 10.202.0.5 10.202.0.6 10.203.40.2 10.203.40.3)
host_ip_telnet=(10.200.200.2 10.200.200.3 10.200.200.4)
host_ip_ssh_number=${#host_ip_ssh[*]}
host_ip_telnet_number=${#host_ip_telnet[*]}
while [ 1 ]
#执行ssh设备
min=0
#max=5
while [ "$min" -lt "$host_ip_ssh_number" ]
do
#login_ssh_commend="ssh user@$host_ip_ssh[$min]"
filename_config=$(date +%F-%H:%M:%S)_${host_ip_ssh[$min]}
expect -f copy_stat-config ${host_ip_ssh[$min]} $filename_config ssh user@
sleep 5
min=`expr $min + 1`
done
#执行telnet设备
min=0
#max=5
while [ "$min" -lt "$host_ip_telnet_number" ]
do
filename_config=$(date +%F-%H:%M:%S)_${host_ip_telnet[$min]}
expect -f copy_stat-config ${host_ip_telnet[$min]} $filename_config telnet
sleep 5
min=`expr $min + 1`
done
done
监控脚本
jiankong1
#!/bin/bash
echo $(date) 启动jiankong1 >> jiankong.log
while [ 1 ]
do
ps -fe|grep do_copy_stat-config |grep -v grep
#如果不为0,就是不存在这个进程
if [ $? -ne 0 ]
then
#重启进程
cd /copy_config_switch
nohup sh do_copy_stat-config &
echo $(date) 重启do_copy_stat-config >> jiankong.log
fi
ps -fe|grep jiankong2 |grep -v grep
#如果不为0,就是不存在这个进程
if [ $? -ne 0 ]
then
#重启进程
cd /copy_config_switch
nohup sh jiankong2 &
echo $(date) 重启jiankong2 >> jiankong.log
fi
sleep 10
done
jiankong2
#!/bin/bash
echo $(date) 启动jiankong2 >> jiankong.log
while [ 1 ]
do
ps -fe|grep do_copy_stat-config |grep -v grep
#如果不为0,就是不存在这个进程
if [ $? -ne 0 ]
then
#重启进程
cd /copy_config_switch
nohup sh do_copy_stat-config &
echo $(date) 重启do_copy_stat-config >> jiankong.log
fi
ps -fe|grep jiankong1 |grep -v grep
#如果不为0,就是不存在这个进程
if [ $? -ne 0 ]
then
#重启进程
cd /copy_config_switch
nohup sh jiankong1 &
echo $(date) 重启jiankong1 >> jiankong.log
fi
sleep 10
done
注
如果想要同时停止两个jiankong脚本,可以使用
ps -ef | grep jiankong | grep -v grep | awk '{print $2}' | xargs kill -9 >/dev/null 2>&1
开机自启动
vim /etc/rc.d/rc.local
/copy_config_switch/jiankong1