expect备份交换机配置

expect备份交换机配置

因公司备份需求,需要对所有的交换机进行配置备份。由于涉及到ssh登录并交互,所以选定expect工具。

注意

  • expect使用log_file会记录下所有触发expect时的特殊控制字符,比如---- More ----^[[42D ^[[42D。vim不会解释这些特殊字符,cat和more则不影响。需要恢复时可以使用cat然后用CRT log session,或者用sed替换掉这些字符。
  • 关于expect语句中的expect触发字符串,请根据各自交换机品牌型号进行调整,我这里备份的是华为的交换机
  • 交换机量比较大的情况可以再写一个expect脚本首次登陆写入.ssh/knowhosts

整体脚本思路

  1. 用expect模拟登录交换机,并查看交换机配置,log_file记录交互过程,
  2. 采用文本存储交换机IP、账号、密码,变量赋值并循环
  3. 将所有的log_file按时间戳进行存档
  4. 为了日后监控备份过程,expect脚本备份配置的结尾加上一个标记来确定备份是否完成(我采用的是查看交换机时间信息 display clock)
  5. 设置计划任务,每天进行一次备份,并记录备份起止时间

脚本

#!/bin/bash
#取时间戳
BACKUP_DATA=`date +%Y%m%d`
#创建时间戳的备份目录  
mkdir -p /backup/$BACKUP_DATA  
#账号密码及IP地址存放在user.passwd中,通过awk获取所有IP并存放在数组IPADDR(大写)
IPADDR=(`cat  /backup/user.passwd  |  awk '{print $1 }'`)  
#for循环,取出所有ip地址复制ipadrr(小写)
for  ipaddr in  ${IPADDR[@]}   
do 
#输出备份开始时间戳
echo "`date +%H:%M:%S`  开始备份$ipaddr"
#取出相应交换机的密码
PASSWORD=(`cat  /backup/user.passwd  | grep "$ipaddr" |   awk '{print $2}'`)
/usr/bin/expect >> /dev/null  <<  EOF 
set timeout 10 
log_file   /backup/$BACKUP_DATA/$ipaddr.config
spawn ssh admin@$ipaddr
expect "*Password: "
send "$PASSWORD\r"
expect "*>"
send "display  current-configuration \r"
while (1) {
expect {
"*--- More ----" { send " " }
"return" { break }
 }
}
expect "*>"
send "display  clock\r"
expect "*>"
send "quit\r"
EOF
echo "`date +%H:%M:%S`  备份完成"
done

这里简单描述一下expect:设置超时10秒(SSH连接时有时反解比较慢,所以设长一点),设置log_file路径,起ssh进程(我们用统一账号做监控,所以我这里其实没有用变量的去保存用户名),然后模拟登录,查询当前交换机所有配置,这里起了一个死循环,只要检测到*--- More ----,就输出空格,直到查看完所有配置检测到return,最后再执行一个display clock,只是为了监控一下查看配置的过程是否有正常执行,,同时也是为了方便日后监控整个备份过程是否成功,不是必须的。

crontab

0 0 * * *   /backup/network_backup.sh > /backup/logs/$(date +"\%Y-\%m-\%d").log 2>&1

backup日志

[root@networkbackup backup]# cat logs/2017-10-13.log 
15:44:01  开始备份x.x.x.x
15:44:13  备份完成
15:44:13  开始备份x.x.x.x
15:44:17  备份完成
15:44:17  开始备份x.x.x.x
15:44:20  备份完成
15:44:20  开始备份x.x.x.x
15:44:32  备份完成
15:44:32  开始备份x.x.x.x
15:44:34  备份完成

### 回答1: 批量备份交换机配置文件的shell脚本可以通过使用SSH协议远程登录到交换机,并执行相应的命令来实现。 以下是一个示例的批量备份交换机配置文件的shell脚本: ```bash #!/bin/bash # 配置交换机设备的IP地址和凭据 switches=("192.168.1.1" "192.168.1.2") username="admin" password="password" backup_folder="/path/to/backup/folder" # 循环遍历所有交换机 for switch in "${switches[@]}" do # 使用SSH登录到交换机 sshpass -p $password ssh -o StrictHostKeyChecking=no -l $username $switch << EOF # 执行备份交换机配置的命令 show running-config > $backup_folder/switch_$switch.cfg # 退出交换机 exit EOF # 检查备份是否成功 if [ $? -eq 0 ]; then echo "交换机 $switch 的配置文件备份成功!" else echo "交换机 $switch 的配置文件备份失败!" fi done ``` 在这个脚本中,我们首先定义了需要备份交换机的IP地址、登录凭据和备份文件夹路径。然后,使用一个循环遍历所有的交换机。循环体内,我们使用`sshpass`命令通过SSH登录到指定的交换机,并在一个Here Document中执行备份配置文件的命令,将配置文件保存到指定的备份文件夹中。最后,通过检查命令的退出状态来判断备份是否成功,并给出相应的提示信息。 使用这个示例shell脚本,您可以根据实际情况修改交换机的IP地址和凭据,以及备份文件夹的路径,来实现批量备份交换机配置文件的功能。 ### 回答2: 批量备份交换机配置文件的Shell脚本可以使用以下方法实现: 1. 首先,创建一个用于存储备份文件的目录,可以使用`mkdir`命令创建。 ``` mkdir backup_directory ``` 2. 使用`for`循环遍历所有需要备份交换机IP地址。 ``` for ip in 192.168.1.1 192.168.1.2 192.168.1.3 do # 在这里写配置备份的命令 done ``` 3. 使用`ssh`命令登录到交换机,并执行备份配置的命令。这里可以使用`expect`工具来自动输入登录密码。 ``` ssh username@ip << EOF expect "password: " send "password\r" expect "#" send "show running-config > backup_directory/switch_config_${ip}.txt\r" expect "#" send "exit\r" EOF ``` 其中,`username`和`password`分别为登录交换机的用户名和密码。 4. 执行完备份命令后,将备份文件从交换机复制到本地备份目录。 ``` scp username@ip:~/backup_directory/switch_config_${ip}.txt ~/backup_directory/ ``` 这里的`username`为登录交换机的用户名,`ip`为交换机的IP地址。 5. 最后,使用`rm`命令删除交换机上的备份文件。 ``` ssh username@ip << EOF expect "password: " send "password\r" expect "#" send "rm backup_directory/switch_config_${ip}.txt\r" expect "#" send "exit\r" EOF ``` 以上就是一个简单的批量备份交换机配置文件的Shell脚本。根据实际需要,可以调整和优化脚本中的命令和参数。 ### 回答3: 批量备份交换机配置文件的shell脚本如下: ```shell #!/bin/bash # 定义交换机IP列表 switches=("192.168.1.1" "192.168.1.2" "192.168.1.3") # 定义备份目录 backup_dir="/path/to/backup" # 遍历交换机列表 for switch in "${switches[@]}" do # 连接到交换机并执行备份命令 ssh user@$switch "copy running-config tftp backup-server $backup_dir/$switch.conf" # 检查备份结果 if [ $? -eq 0 ]; then echo "交换机 $switch 配置文件备份成功" else echo "交换机 $switch 配置文件备份失败" fi done ``` 上述脚本中,我们首先定义了一个交换机IP列表和备份目录,然后使用循环遍历每个交换机IP。在循环中,我们通过SSH连接到交换机,并执行备份命令。备份命令中的具体参数可以根据不同交换机厂商和型号进行调整。最后,我们检查备份结果并输出相应的信息。 请注意,在执行该脚本之前,请确保已经配置好SSH公钥认证以及正确配置了交换机的TFTP服务器信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值