Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- set -e
- #
- time=$(date +%s)
- #
- SOURCE="${BASH_SOURCE[0]}"
- while [ -h "$SOURCE" ]; do
- DIR="$(cd -P "$(dirname "$SOURCE")" > /dev/null 2>&1 && pwd)"
- SOURCE="$(readlink "$SOURCE")"
- [[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE"
- done
- DIR="$(cd -P "$(dirname "$SOURCE")" > /dev/null 2>&1 && pwd)"
- #
- DATE=$(date +%F_%H:%M:%S)
- TMP_DIR=/tmp
- DATADIR=/var/data/mkdata
- BACKUPDIR=/var/data/mkbackup
- #
- ROUTERLIST=$DATADIR/routerlist
- SSHLIST=$DATADIR/sshport
- PF=$DATADIR/.pf
- #
- FULL_LIST=$TMP_DIR/mikr_list
- FULL_LIST_PORT=$TMP_DIR/mikr_list_port
- FULL_LIST_SERIAL=$TMP_DIR/mikr_list_serail
- #
- LOGIN=tech
- JOB=40
- if [ -f "$PF" ]; then
- PASSWORD=$(awk 'NR == 1' $PF)
- else
- echo "File password not found"
- exit 1
- fi
- #
- SSHPORTROUTER=2022
- FTPPORT=2100
- readarray -t HOSTROUTERLIST < "$ROUTERLIST"
- SSHPORT=$(cat "$SSHLIST")
- #
- SSHPASS=$(command -v sshpass)
- AWK=$(command -v awk)
- SED=$(command -v sed)
- PARALLEL=$(command -v parallel)
- NC=$(command -v nc)
- WGET=$(command -v wget)
- zabbix_sender=$(command -v zabbix_sender)
- #JQ=$(command -v jq)
- #
- function create_list() {
- local hostip=$1
- # shellcheck disable=2016
- "$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"
- }
- function check_port() {
- set +e
- IFS=' '
- read -r -a SSHPORTS <<< "$SSHPORT"
- local hostip=$1
- for index in "${!SSHPORTS[@]}"; do
- "$NC" -zv "$hostip" "${SSHPORTS[$index]}" > /dev/null 2>&1
- # shellcheck disable=SC2181
- if [ $? -eq 0 ]; then
- echo "${hostip}:${SSHPORTS[$index]}" >> "$FULL_LIST_PORT"
- break
- fi
- done
- set -e
- }
- function create_flle() {
- filename=$1
- if [ -f "$filename" ]; then
- rm -rf "$filename"
- fi
- touch "$filename"
- }
- function check_number() {
- # shellcheck disable=2155
- # shellcheck disable=2016
- local hostip=$(echo "$1" | "$AWK" -F ":" '{ print $1 }')
- # shellcheck disable=2155
- # shellcheck disable=2016
- local sshport=$(echo "$1" | "$AWK" -F ":" '{ print $2 }')
- local serial=""
- # shellcheck disable=2016
- serial=$("$SSHPASS" -p "$PASSWORD" ssh "$LOGIN@$hostip" -p "${sshport}" -o StrictHostKeyChecking=no '/system routerboard print' |
- grep serial-number | "$AWK" -F ":" '{ print $2 }' | "$SED" 's/\r$//' | "$SED" 's/^[ \t]*//;s/[ \t]*$//')
- if [[ -n "$serial" ]]; then
- echo "${serial}:${hostip}:${sshport}" >> $FULL_LIST_SERIAL
- fi
- }
- function create_bsp() {
- # shellcheck disable=2155
- # shellcheck disable=2016
- local hostip=$(echo "$1" | "$AWK" -F ":" '{ print $1 }')
- # shellcheck disable=2155
- # shellcheck disable=2016
- local sshport=$(echo "$1" | "$AWK" -F ":" '{ print $2 }')
- "$SSHPASS" -p "$PASSWORD" ssh "$LOGIN@$hostip" -p "${sshport}" -o StrictHostKeyChecking=no \
- 'ip service set ftp disabled=no port=2100 address=192.168.166.0/24,192.168.165.0/24'
- "$SSHPASS" -p "$PASSWORD" ssh "$LOGIN@$hostip" -p "${sshport}" -o StrictHostKeyChecking=no \
- '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'
- "$WGET" -N -nv -P "$BACKUPDIR/$hostip" ftp://"$hostip:$FTPPORT"/* --ftp-user="$LOGIN" --ftp-password="$PASSWORD"
- # shellcheck disable=2016
- "$SSHPASS" -p "$PASSWORD" ssh "$LOGIN@$hostip" -p "${sshport}" -o StrictHostKeyChecking=no \
- ':global rmbackup [/file find type="backup"]; :foreach i in=$rmbackup do={:put [/file remove $i]}'
- # shellcheck disable=SC2181
- if [ $? -eq 0 ]; then
- # shellcheck disable=2016
- "$SSHPASS" -p "$PASSWORD" ssh "$LOGIN@$hostip" -p "${sshport}" -o StrictHostKeyChecking=no \
- ':global rmscript [/file find type="script"]; :foreach i in=$rmscript do={:put [/file remove $i]}'
- # shellcheck disable=SC2181
- if [ $? -eq 0 ]; then
- echo "Host $hostip SSHPORT = ${sshport} - All script files are removed"
- # shellcheck disable=2016
- "$SSHPASS" -p "$PASSWORD" ssh "$LOGIN@$hostip" -p "${sshport}" -o StrictHostKeyChecking=no \
- ':global zalohafile ( [/ system identity get name] ) ; / export file=$zalohafile'
- # shellcheck disable=2016
- "$SSHPASS" -p "$PASSWORD" ssh "$LOGIN@$hostip" -p "${sshport}" -o StrictHostKeyChecking=no \
- ':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'
- fi
- fi
- }
- function file_size() {
- filename=$1
- size=0
- if [ -f "$filename" ]; then
- size=$(wc -l < "$filename")
- fi
- echo "$size"
- }
- #
- export PASSWORD LOGIN SSHPORTROUTER FULL_LIST FTPPORT FULL_LIST_PORT FULL_LIST_SERIAL SSHPORT BACKUPDIR DATADIR
- export SSHPASS AWK NC SED WGET
- export SHELL=/bin/bash PARALLEL_SHELL=/bin/bash
- mkdir -p "$BACKUPDIR"
- mkdir -p "$DATADIR"
- echo "$(date) - Create list of routers"
- create_flle "$FULL_LIST"
- create_flle "$FULL_LIST_PORT"
- create_flle "$FULL_LIST_SERIAL"
- echo " $(date) - Start create list"
- export -f create_list
- "$PARALLEL" -j 4 create_list ::: "${HOSTROUTERLIST[@]}" > /dev/null 2>&1
- echo " $(date) - End create list"
- echo "$(date) - List analysis"
- if [ -f "$DATADIR/mikr_list_static" ]; then
- cat "$DATADIR/mikr_list_static" >> "$FULL_LIST"
- fi
- if [ -f "$DATADIR/mikr_list_banned" ]; then
- # shellcheck disable=2013
- for a in $(cat "$DATADIR/mikr_list_banned"); do
- "$SED" -e "s/^$a$//g" -i "$FULL_LIST"
- done
- fi
- "$SED" -i '/^$/d' "$FULL_LIST"
- count_full_list=$(file_size "$FULL_LIST")
- echo "$(date) - List of routers created!. All host: $count_full_list"
- echo " $(date) - Scan servers open ports"
- export -f check_port
- "$PARALLEL" -j "$JOB" check_port :::: "$FULL_LIST" > /dev/null 2>&1
- count_list_port=$(file_size $FULL_LIST_PORT)
- echo " $(date) - Stop scan. All host: $count_list_port"
- echo " $(date) - Start get serial number"
- export -f check_number
- "$PARALLEL" -j "$JOB" check_number :::: "$FULL_LIST_PORT" > /dev/null 2>&1
- count_list_serial=$(file_size "$FULL_LIST_SERIAL")
- echo " $(date) - Stop get. All host: $count_list_serial"
- create_flle "$FULL_LIST_PORT"
- echo " $(date) - Start array"
- readarray -t list_serail < "$FULL_LIST_SERIAL"
- IFS=$'\n'
- # shellcheck disable=SC2207
- sorted_serail=($(sort <<< "${list_serail[*]}"))
- unset IFS
- array_size=${#sorted_serail[@]}
- for index in ${!sorted_serail[*]}; do
- # shellcheck disable=2016
- serial=$(echo "${sorted_serail[$index]}" | "$AWK" -F ":" '{ print $1 }')
- # shellcheck disable=2016
- ip=$(echo "${sorted_serail[$index]}" | "$AWK" -F ":" '{ print $2 }')
- # shellcheck disable=2016
- port=$(echo "${sorted_serail[$index]}" | "$AWK" -F ":" '{ print $3 }')
- flag=0
- # shellcheck disable=2004
- for ((a = $index + 1; a < $array_size - 1; a++)); do
- # shellcheck disable=2016
- serial2=$(echo "${sorted_serail[$a]}" | "$AWK" -F ":" '{ print $1 }')
- if [ "$serial" == "$serial2" ]; then
- flag=1
- break
- fi
- done
- if [[ "$flag" -eq 0 ]]; then
- echo "${ip}:${port}" >> $FULL_LIST_PORT
- fi
- done
- count_list_port_all=$(file_size "$FULL_LIST_PORT")
- echo " $(date) - Stop scan: All host: $count_list_port_all"
- echo "$(date) - Enable FTP on Mikrotiks and Backup configs to server"
- echo "$(date) - Start work"
- export -f create_bsp
- "$PARALLEL" -j "$JOB" create_bsp :::: "$FULL_LIST_PORT" > /dev/null 2>&1
- echo "$(date) - Remove string"
- find "$BACKUPDIR" -name '*.rsc' -exec "$SED" -i 1d {} \;
- echo "$(date) - End work"
- cd "$BACKUPDIR" || exit
- #
- echo "$(date) - Add in git"
- git add --all
- git commit -am "Backup $DATE"
- git pull
- git push
- #
- rm -f "$FULL_LIST_PORT"
- rm -f "$FULL_LIST"
- rm -f "$FULL_LIST_SERIAL"
- echo "$(date) - Finished"
- endtime=$(($(date +%s) - time))
- echo "$(date) - End time: $endtime"
- 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\"}"
- "$zabbix_sender" -c /etc/zabbix/zabbix_agentd.conf -k mk_json_backup_data -o "$jr"
- exit 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement