Advertisement
Guest User

Untitled

a guest
May 6th, 2019
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 8.25 KB | None | 0 0
  1. #!/bin/bash
  2. set -e
  3. #
  4. time=$(date +%s)
  5. #
  6. SOURCE="${BASH_SOURCE[0]}"
  7. while [ -h "$SOURCE" ]; do
  8.   DIR="$(cd -P "$(dirname "$SOURCE")" > /dev/null 2>&1 && pwd)"
  9.  SOURCE="$(readlink "$SOURCE")"
  10.  [[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE"
  11. done
  12. DIR="$(cd -P "$(dirname "$SOURCE")" > /dev/null 2>&1 && pwd)"
  13. #
  14. DATE=$(date +%F_%H:%M:%S)
  15. TMP_DIR=/tmp
  16. DATADIR=/var/data/mkdata
  17. BACKUPDIR=/var/data/mkbackup
  18. #
  19. ROUTERLIST=$DATADIR/routerlist
  20. SSHLIST=$DATADIR/sshport
  21. PF=$DATADIR/.pf
  22. #
  23. FULL_LIST=$TMP_DIR/mikr_list
  24. FULL_LIST_PORT=$TMP_DIR/mikr_list_port
  25. FULL_LIST_SERIAL=$TMP_DIR/mikr_list_serail
  26. #
  27. LOGIN=tech
  28. JOB=40
  29. if [ -f "$PF" ]; then
  30.  PASSWORD=$(awk 'NR == 1' $PF)
  31. else
  32.  echo "File password not found"
  33.  exit 1
  34. fi
  35. #
  36. SSHPORTROUTER=2022
  37. FTPPORT=2100
  38. readarray -t HOSTROUTERLIST < "$ROUTERLIST"
  39. SSHPORT=$(cat "$SSHLIST")
  40. #
  41. SSHPASS=$(command -v sshpass)
  42. AWK=$(command -v awk)
  43. SED=$(command -v sed)
  44. PARALLEL=$(command -v parallel)
  45. NC=$(command -v nc)
  46. WGET=$(command -v wget)
  47. zabbix_sender=$(command -v zabbix_sender)
  48. #JQ=$(command -v jq)
  49. #
  50. function create_list() {
  51.  local hostip=$1
  52.  # shellcheck disable=2016
  53.  "$SSHPASS" -p "$PASSWORD" ssh "$LOGIN@$hostip" -p "$SSHPORTROUTER" -o StrictHostKeyChecking=no ':global mtlist [/ppp active print]; :foreach i in=$mtlist do={:put [/ppp active get $i address]};' | "$AWK" '{ print $4,$5 }' | "$AWK" 'NR > 2' | sort | uniq -w 15 | "$AWK" '{ print $2 }' | "$AWK" 'NF' >> "$FULL_LIST"
  54. }
  55.  
  56. function check_port() {
  57.  set +e
  58.  IFS=' '
  59.  read -r -a SSHPORTS <<< "$SSHPORT"
  60.  local hostip=$1
  61.  for index in "${!SSHPORTS[@]}"; do
  62.    "$NC" -zv "$hostip" "${SSHPORTS[$index]}" > /dev/null 2>&1
  63.    # shellcheck disable=SC2181
  64.    if [ $? -eq 0 ]; then
  65.      echo "${hostip}:${SSHPORTS[$index]}" >> "$FULL_LIST_PORT"
  66.      break
  67.    fi
  68.  done
  69.  set -e
  70. }
  71.  
  72. function create_flle() {
  73.  filename=$1
  74.  if [ -f "$filename" ]; then
  75.    rm -rf "$filename"
  76.  fi
  77.  touch "$filename"
  78. }
  79.  
  80. function check_number() {
  81.  # shellcheck disable=2155
  82.  # shellcheck disable=2016
  83.  local hostip=$(echo "$1" | "$AWK" -F ":" '{ print $1 }')
  84.  # shellcheck disable=2155
  85.  # shellcheck disable=2016
  86.  local sshport=$(echo "$1" | "$AWK" -F ":" '{ print $2 }')
  87.  local serial=""
  88.  # shellcheck disable=2016
  89.  serial=$("$SSHPASS" -p "$PASSWORD" ssh "$LOGIN@$hostip" -p "${sshport}" -o StrictHostKeyChecking=no '/system routerboard print' |
  90.    grep serial-number | "$AWK" -F ":" '{ print $2 }' | "$SED" 's/\r$//' | "$SED" 's/^[ \t]*//;s/[ \t]*$//')
  91.  if [[ -n "$serial" ]]; then
  92.    echo "${serial}:${hostip}:${sshport}" >> $FULL_LIST_SERIAL
  93.  fi
  94. }
  95.  
  96. function create_bsp() {
  97.  # shellcheck disable=2155
  98.  # shellcheck disable=2016
  99.  local hostip=$(echo "$1" | "$AWK" -F ":" '{ print $1 }')
  100.  # shellcheck disable=2155
  101.  # shellcheck disable=2016
  102.  local sshport=$(echo "$1" | "$AWK" -F ":" '{ print $2 }')
  103.  "$SSHPASS" -p "$PASSWORD" ssh "$LOGIN@$hostip" -p "${sshport}" -o StrictHostKeyChecking=no \
  104.    'ip service set ftp disabled=no port=2100 address=192.168.166.0/24,192.168.165.0/24'
  105.  "$SSHPASS" -p "$PASSWORD" ssh "$LOGIN@$hostip" -p "${sshport}" -o StrictHostKeyChecking=no \
  106.    'ip service set winbox disabled=no port=8291 address=192.168.0.0/16,91.201.73.82/32,10.100.0.0/16,195.209.131.15/32'
  107.  "$WGET" -N -nv -P "$BACKUPDIR/$hostip" ftp://"$hostip:$FTPPORT"/* --ftp-user="$LOGIN" --ftp-password="$PASSWORD"
  108.  # shellcheck disable=2016
  109.  "$SSHPASS" -p "$PASSWORD" ssh "$LOGIN@$hostip" -p "${sshport}" -o StrictHostKeyChecking=no \
  110.    ':global rmbackup [/file find type="backup"]; :foreach i in=$rmbackup do={:put [/file remove $i]}'
  111.  # shellcheck disable=SC2181
  112.  if [ $? -eq 0 ]; then
  113.    # shellcheck disable=2016
  114.    "$SSHPASS" -p "$PASSWORD" ssh "$LOGIN@$hostip" -p "${sshport}" -o StrictHostKeyChecking=no \
  115.      ':global rmscript [/file find type="script"]; :foreach i in=$rmscript do={:put [/file remove $i]}'
  116.    # shellcheck disable=SC2181
  117.    if [ $? -eq 0 ]; then
  118.      echo "Host $hostip SSHPORT = ${sshport} - All script files are removed"
  119.      # shellcheck disable=2016
  120.      "$SSHPASS" -p "$PASSWORD" ssh "$LOGIN@$hostip" -p "${sshport}" -o StrictHostKeyChecking=no \
  121.        ':global zalohafile ( [/ system identity get name] ) ; / export file=$zalohafile'
  122.      # shellcheck disable=2016
  123.      "$SSHPASS" -p "$PASSWORD" ssh "$LOGIN@$hostip" -p "${sshport}" -o StrictHostKeyChecking=no \
  124.        ':global zalohafile ( [/ system identity get name] . "-" . [:pick [/ sys clock get date] 7 11]  . "-" . [:pick [/ sys clock get date] 0 3]  . "-" . [:pick [/ sys clock get date] 4 6] . "-" . [:pick [/ sys clock get time] 0 2]  . "-" . [:pick [/ sys clock get time] 3 5]  . "-" . [:pick [/ sys clock get time] 6 8]) ; / system backup save name=$zalohafile'
  125.    fi
  126.  fi
  127. }
  128.  
  129. function file_size() {
  130.  filename=$1
  131.  size=0
  132.  if [ -f "$filename" ]; then
  133.    size=$(wc -l < "$filename")
  134.  fi
  135.  echo "$size"
  136. }
  137. #
  138. export PASSWORD LOGIN SSHPORTROUTER FULL_LIST FTPPORT FULL_LIST_PORT FULL_LIST_SERIAL SSHPORT BACKUPDIR DATADIR
  139. export SSHPASS AWK NC SED WGET
  140. export SHELL=/bin/bash PARALLEL_SHELL=/bin/bash
  141. mkdir -p "$BACKUPDIR"
  142. mkdir -p "$DATADIR"
  143. echo "$(date) - Create list of routers"
  144. create_flle "$FULL_LIST"
  145. create_flle "$FULL_LIST_PORT"
  146. create_flle "$FULL_LIST_SERIAL"
  147. echo " $(date) - Start create list"
  148. export -f create_list
  149. "$PARALLEL" -j 4 create_list ::: "${HOSTROUTERLIST[@]}" > /dev/null 2>&1
  150. echo " $(date) - End create list"
  151. echo "$(date) - List analysis"
  152. if [ -f "$DATADIR/mikr_list_static" ]; then
  153.  cat "$DATADIR/mikr_list_static" >> "$FULL_LIST"
  154. fi
  155. if [ -f "$DATADIR/mikr_list_banned" ]; then
  156.  # shellcheck disable=2013
  157.  for a in $(cat "$DATADIR/mikr_list_banned"); do
  158.    "$SED" -e "s/^$a$//g" -i "$FULL_LIST"
  159.  done
  160. fi
  161. "$SED" -i '/^$/d' "$FULL_LIST"
  162. count_full_list=$(file_size "$FULL_LIST")
  163. echo "$(date) - List of routers created!. All host: $count_full_list"
  164. echo " $(date) - Scan servers open ports"
  165. export -f check_port
  166. "$PARALLEL" -j "$JOB" check_port :::: "$FULL_LIST" > /dev/null 2>&1
  167. count_list_port=$(file_size $FULL_LIST_PORT)
  168. echo " $(date) - Stop scan. All host: $count_list_port"
  169. echo " $(date) - Start get serial number"
  170. export -f check_number
  171. "$PARALLEL" -j "$JOB" check_number :::: "$FULL_LIST_PORT" > /dev/null 2>&1
  172. count_list_serial=$(file_size "$FULL_LIST_SERIAL")
  173. echo " $(date) - Stop get. All host: $count_list_serial"
  174. create_flle "$FULL_LIST_PORT"
  175. echo " $(date) - Start array"
  176. readarray -t list_serail < "$FULL_LIST_SERIAL"
  177. IFS=$'\n'
  178. # shellcheck disable=SC2207
  179. sorted_serail=($(sort <<< "${list_serail[*]}"))
  180. unset IFS
  181. array_size=${#sorted_serail[@]}
  182. for index in ${!sorted_serail[*]}; do
  183.  # shellcheck disable=2016
  184.  serial=$(echo "${sorted_serail[$index]}" | "$AWK" -F ":" '{ print $1 }')
  185.  # shellcheck disable=2016
  186.  ip=$(echo "${sorted_serail[$index]}" | "$AWK" -F ":" '{ print $2 }')
  187.  # shellcheck disable=2016
  188.  port=$(echo "${sorted_serail[$index]}" | "$AWK" -F ":" '{ print $3 }')
  189.  flag=0
  190.  # shellcheck disable=2004
  191.  for ((a = $index + 1; a < $array_size - 1; a++)); do
  192.    # shellcheck disable=2016
  193.    serial2=$(echo "${sorted_serail[$a]}" | "$AWK" -F ":" '{ print $1 }')
  194.    if [ "$serial" == "$serial2" ]; then
  195.      flag=1
  196.      break
  197.    fi
  198.  done
  199.  if [[ "$flag" -eq 0 ]]; then
  200.    echo "${ip}:${port}" >> $FULL_LIST_PORT
  201.  fi
  202. done
  203. count_list_port_all=$(file_size "$FULL_LIST_PORT")
  204. echo " $(date) - Stop scan: All host: $count_list_port_all"
  205. echo "$(date) - Enable FTP on Mikrotiks and Backup configs to server"
  206. echo "$(date) - Start work"
  207. export -f create_bsp
  208. "$PARALLEL" -j "$JOB" create_bsp :::: "$FULL_LIST_PORT" > /dev/null 2>&1
  209. echo "$(date) - Remove string"
  210. find "$BACKUPDIR" -name '*.rsc' -exec "$SED" -i 1d {} \;
  211. echo "$(date) - End work"
  212. cd "$BACKUPDIR" || exit
  213. #
  214. echo "$(date) - Add in git"
  215. git add --all
  216. git commit -am "Backup $DATE"
  217. git pull
  218. git push
  219. #
  220. rm -f "$FULL_LIST_PORT"
  221. rm -f "$FULL_LIST"
  222. rm -f "$FULL_LIST_SERIAL"
  223. echo "$(date) - Finished"
  224. endtime=$(($(date +%s) - time))
  225. echo "$(date) - End time: $endtime"
  226.  
  227. jr="{\"count_full_list\":\"$count_full_list\", \"count_list_port\":\"$count_list_port\", \"count_list_serial\":\"$count_list_serial\", \"count_list_port_all\":\"$count_list_port_all\",\"endtime\":\"$endtime\"}"
  228.  
  229. "$zabbix_sender" -c /etc/zabbix/zabbix_agentd.conf -k mk_json_backup_data -o "$jr"
  230. exit 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement