Guest User

Untitled

a guest
Jun 2nd, 2023
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 6.17 KB | None | 0 0
  1. #Генерируем ключ для huawei
  2. ssh-keygen -f  ~/.ssh/id_rsa -t rsa -b 1024
  3.  
  4. #конвертируем ключ для Huawei (вывод команды запишите, он понадобится дальше)
  5. ssh-keygen -e -m pem -f ~/.ssh/id_rsa.pub | sed '1d;$d' | tr -d '\n' | base64 -d | xxd -c 24 -g 4 -u | sed -e "s/^.*: //" -e "s/.\{25\}$//g"
  6.  
  7. #команды для роутеров Huawei Ar6120 (ключ заменить на вывод предыдущей команды!)
  8. sys
  9. rsa peer-public-key  gitea
  10.    public-key-code begin
  11. 30818902 818100BC BCEEF881 EF35DE90 5E25D514 A989BE77
  12. AF833856 B814757D 14B5DF2E 54BE0107 3CDC68A1 AD5A814B
  13. 9DAC1EDD DFF40E99 721C8225 BEA6B710 4F20417C B823011F
  14. 1A7A8766 95327491 372D6D8C 67D101F5 E0E9E200 915C4740
  15. 2C299B4E AA2E1B90 F433EB78 2DC270EA D131BBB8 8B353A43
  16. 3B9B154C 91782BDC 35CD61B4 8E346F02 03010001
  17.   public-key-code end
  18. peer-public-key end
  19. aaa
  20.   local-user backuper privilege level 15
  21.   local-user backuper service-type ssh
  22.   quit
  23.  ssh user backuper authentication-type rsa
  24.  ssh user backuper assign rsa-key gitea
  25. quit
  26. quit
  27. save
  28. y
  29.  
  30. #Для коммутаторов Huawei S5735 самую чуточку отличий:
  31. sys
  32. rsa peer-public-key  gitea
  33.    public-key-code begin
  34. 30818902 818100BC BCEEF881 EF35DE90 5E25D514 A989BE77
  35. AF833856 B814757D 14B5DF2E 54BE0107 3CDC68A1 AD5A814B
  36. 9DAC1EDD DFF40E99 721C8225 BEA6B710 4F20417C B823011F
  37. 1A7A8766 95327491 372D6D8C 67D101F5 E0E9E200 915C4740
  38. 2C299B4E AA2E1B90 F433EB78 2DC270EA D131BBB8 8B353A43
  39. 3B9B154C 91782BDC 35CD61B4 8E346F02 03010001
  40.   public-key-code end
  41. peer-public-key end
  42. user-interface vty 0 4
  43.   user privilege level 15
  44. aaa
  45.   local-user backuper privilege level 15
  46.   local-user backuper service-type ssh
  47.   quit
  48.  ssh user backuper authentication-type rsa
  49.  ssh user backuper assign rsa-key gitea
  50.  ssh user backuper service-type all
  51. quit
  52. save
  53. y
  54.  
  55. #Для вставки в БД:
  56. insert into netdev (hostname,ip,login,pass,tag,model) values ( 'ufa-ar6120-2', '10.2.100.2','backuper','','huawei','AR6120');
  57.  
  58. #скрипт /config/huawei/do_backup.sh
  59. #!/bin/bash -i
  60. eval "$(ssh-agent -s)"
  61. ssh-add /root/.ssh/id_rsa
  62. result=$(sqlite3  /config/database/netdevices.db "SELECT hostname,ip,login,model from netdev WHERE tag='huawei';")
  63. dev_arr=($result)
  64. tftp_ip="10.99.100.1"
  65.  
  66. for device in "${dev_arr[@]}"
  67. do
  68.   IFS='|' read -r -a split <<< "$device"
  69.   ip=${split[1]}
  70.   hostname=${split[0]}
  71.   login=${split[2]}
  72.   model=${split[3]}
  73.  
  74. #clear log file
  75.   >/config/tmpfiles/$hostname-log.txt
  76. # using arguments: host_ip, login, hostname, tftp_ip
  77.   if [ "$model" = "AR6120" ]
  78.   then
  79.     /config/huawei/backup_by_expect.sh $ip $login $hostname $tftp_ip &
  80.   elif [ "$model" = "SW5735" ]
  81.   then
  82.     /config/huawei/backup_by_expect_sw5735.sh $ip $login $hostname $tftp_ip &
  83.   fi
  84. done
  85. exit
  86.  
  87. #скрипт /config/huawei/backup_by_expect.sh
  88. #!/usr/bin/expect -f
  89. log_user 0
  90. set host_ip [lindex $argv 0]
  91. set login [lindex $argv 1]
  92. set hostname [lindex $argv 2]
  93. set tftp_ip [lindex $argv 3]
  94.  
  95. log_file -a /config/tmpfiles/$hostname-log.txt
  96. spawn ssh -oStrictHostKeyChecking=no $login@$host_ip
  97. expect ">"
  98. exp_send "save $hostname.cfg\r"
  99. expect ">"
  100. exp_send "y\r"
  101. expect ">"
  102. exp_send "y\r"
  103. expect ">"
  104. exp_send "tftp $tftp_ip put $hostname.cfg $hostname.cfg\r"
  105. expect ">"
  106. sleep 6
  107. exp_send "quit\r"
  108. interact
  109.  
  110. #скрипт /config/huawei/backup_by_expect_sw5735.sh
  111. #!/usr/bin/expect -f
  112. log_user 0
  113. set host_ip [lindex $argv 0]
  114. set login [lindex $argv 1]
  115. set hostname [lindex $argv 2]
  116. set tftp_ip [lindex $argv 3]
  117.  
  118. log_file -a /config/tmpfiles/$hostname-log.txt
  119. spawn ssh -oStrictHostKeyChecking=no $login@$host_ip
  120. sleep 5
  121. expect ">"
  122. exp_send "save $hostname.cfg\r"
  123. expect ">"
  124. exp_send "y\r"
  125. expect ">"
  126. exp_send "y\r"
  127. expect ">"
  128. exp_send "tftp $tftp_ip put $hostname.cfg $hostname.cfg\r"
  129. expect ">"
  130. exp_send "quit\r"
  131. interact
  132.  
  133. #скрипт /config/huawei/commit_and_push.sh
  134. #!/bin/bash
  135. eval "$(ssh-agent -s)"
  136. ssh-add /root/.ssh/rsa_2048
  137. cd /config/huawei
  138. >/config/tmpfiles/resultfile.txt
  139. /config/huawei/analyse_result.sh
  140. echo "COMMIT" >> /config/tmpfiles/resultfile.txt
  141. datestr=$(date '+%Y-%m-%d')
  142. git add tftp/*
  143. git commit -a -m "backup-$datestr"  &>>/config/tmpfiles/resultfile.txt
  144. echo "PUSH" >> /config/tmpfiles/resultfile.txt
  145. git push &>>/config/tmpfiles/resultfile.txt
  146. /usr/bin/mail Network_info@domain.ru < /config/tmpfiles/resultfile.txt -s "отчет по бэкапам сетевого оборудования"
  147. exit
  148.  
  149. #анализатор логов /config/huawei/analyse_result.sh
  150. #!/bin/bash
  151. result=$(sqlite3  /config/database/netdevices.db "SELECT hostname from netdev WHERE tag='huawei' and model='AR6120';")
  152. dev_arr=($result)
  153. success_str1="  Configuration file had been saved successfully"
  154. success_str2="TFTP: Uploading the file successfully."
  155. success_str_sw="Save the configuration successfully."
  156. ok=0
  157. datestr=$(date '+%Y-%m-%d')
  158. echo "$datestr" >> /config/tmpfiles/resultfile.txt
  159. #ROUTERS
  160. for device in "${dev_arr[@]}"
  161. do
  162.   hostname=$device
  163. # when grep is success it returns 0
  164.   grep -q "$success_str1" /config/tmpfiles/$hostname-log.txt
  165.   res1=$?
  166.   grep -q "$success_str2" /config/tmpfiles/$hostname-log.txt
  167.   res2=$?
  168.   if [[ $res1 -eq $ok && $res2 -eq $ok ]]
  169.   then
  170.     echo "$hostname backup is OK" >> /config/tmpfiles/resultfile.txt
  171.   else
  172.     echo "$hostname backup is ERROR! ERROR! ERROR!" >> /config/tmpfiles/resultfile.txt
  173.   fi
  174. done
  175.  
  176. #SWITCHES
  177. result=$(sqlite3  /config/database/netdevices.db "SELECT hostname from netdev WHERE tag='huawei' and model='SW5735';")
  178. dev_arr=($result)
  179. for device in "${dev_arr[@]}"
  180. do
  181.   hostname=$device
  182. # when grep is success it returns 0
  183.   grep -q "$success_str_sw" /config/tmpfiles/$hostname-log.txt
  184.   res1=$?
  185.   grep -q "$success_str2" /config/tmpfiles/$hostname-log.txt
  186.   res2=$?
  187.   if [[ $res1 -eq $ok && $res2 -eq $ok ]]
  188.   then
  189.     echo "$hostname backup is OK" >> /config/tmpfiles/resultfile.txt
  190.   else
  191.     echo "$hostname backup is ERROR! ERROR! ERROR!" >> /config/tmpfiles/resultfile.txt
  192.   fi
  193. done
  194.  
  195. #Запустим скрипты по расписанию: crontab -e
  196. 00 05 * * * /config/huawei/do_backup.sh
  197. 30 05 * * * /config/huawei/commit_and_push.sh
  198.  
  199.  
Add Comment
Please, Sign In to add comment