rsync smb ssh

  1. step

    apt install cifs-utils -y

    apt install rsync -y

    На backup.colocall.eu нет необходимости использовать sshfs
  2. step

    В файле /etc/credentials разместить данные для досупа к Windows

     cat /etc/credentials
    
    username=backup_user
    password=hs47-H7)yM
    
    
  3. step

SSH backup

#!/bin/bash

########################### Constants ###########################
#### Данные для подключения по SSH
    username=backup12345-67
    server=backup12345-67.backup.colocall.eu
    ssh_port=22
    ssh_key="/root/.ssh/colocall.key"

#Даные для SMB
    IP=192.168.1.248
    MNT_POINT=/mnt/alena/   # Точка мониторвани
	
	ls $MNT_POINT >/dev/null || mkdir -p $MNT_POINT
    SMB_V=3.0                       # Версия smb источника
    CREDENTIAL=/etc/credentials    # файл с credentials для smb
    local_directory=$MNT_POINT
	
#Имя сетевого интерфейса и его IP
    ETH=enp3s0
# Сколько свежих каталогов оставить
    COUNT=15
# telegramm
    BOT_TOKEN="18045447450203:AAGEjU7HKEEGle1Zv2an5sVF49QxNxhw03w"
    CHAT_ID="33109821804"
# тескт сообщений
IP_local=$(ip -4 a | grep inet | grep $ETH |  awk '/inet/ {print $2}')
IP_global=$(curl 2ip.com.ua)

MESS="Проблема $0
LAN: $IP_local
WAN: $IP_global"

########################### Функции ###########################
# Монтирование SMB
fun_mount () {
    MESS="$MESS Ошибка mount"
    mount -t cifs //$IP/$SHARA_FROM $MNT_POINT -o credentials=$CREDENTIAL -o vers=$SMB_V -o ro
    if [[ $? -eq 0 ]]; then
    echo "Ресурс смонтирован. ОК"
else
    echo "Ошибка при монтировании"
    curl -s -X POST "https://api.telegram.org/bot$BOT_TOKEN/sendMessage" -d "chat_id=$CHAT_ID&text=$MESS" > /dev/null
    umount $MNT_POINT
    exit 0
fi
}

#2 tar
fun_tar () {
    ls "${target_directory}" || mkdir -p "${target_directory}"
    tar -vczf ${target_directory}`date "+%d-%m-%g_%H-%M-%S"`-Sveta_1cv8.tar.gz   $MNT_POINT
}
#3 rsync
fun_rsync () {
    ssh -p $ssh_port -i $ssh_key $username@$server ls ${target_directory}increment/ >/dev/null || \
    ssh -p $ssh_port -i $ssh_key $username@$server mkdir -p ${target_directory}increment/

    ssh -p $ssh_port -i $ssh_key $username@$server ls ${target_directory}current/ >/dev/null  ||  \
    ssh -p $ssh_port -i $ssh_key $username@$server mkdir -p ${target_directory}current/

rsync -zav --progress --delete -e "ssh -p$ssh_port -i $ssh_key" --recursive "$local_directory" \
"$username@$server:$target_directory/current/"  --backup --backup-dir="${target_directory}/increment/$(date +%Y-%m-%d)/"


# Удаляем старые каталоги в increment

   ssh -p $ssh_port -i $ssh_key $username@$server ls -dt "${target_directory}increment"/*/ | \
   tail -n +$((COUNT+1)) | xargs -I {}   rm -r -- "{}"
    }

#Функция. Сравнить количество файлов локаьных и удаленных
fun_count () {
REMOTE_COUNT=$(ssh  -p$ssh_port -i $ssh_key  $username@$server find $target_directory/current/ | wc -l)
LOCAL_COUNT=$(find  "$local_directory" | wc -l)
echo REMOTE_COUNT $REMOTE_COUNT
echo LOCAL_COUNT $LOCAL_COUNT

if [ "$REMOTE_COUNT" -ne "$LOCAL_COUNT" ]; then
    echo "ошибка"
MESSAGE="Ошибка выполнения скрипта
$echo $0
LAN ip $IP_local
WAN ip $WAN $IP_global
$local_directory

Remote:
$server
$target_directory

Колличество файлов не совпадает!!!
REMOTE_COUNT $REMOTE_COUNT
LOCAL_COUNT  $LOCAL_COUNT
"
curl -s -X POST "https://api.telegram.org/bot$BOT_TOKEN/sendMessage" -d "chat_id=$CHAT_ID&text=$MESSAGE" > /dev/null
fi
}

clear
########################Работаем##############################
#Folder 1 desktop
SHARA_FROM=Desktop         # Shara на windows
target_directory=/backup/yurist/desktop/ # каталог на удаленном сервере, в который проводим синхронизацию

umount $MNT_POINT
fun_mount
fun_rsync
fun_count

#Folder 2 desktop
SHARA_FROM=Documents        
target_directory=/backup/yurist/doc/

umount $MNT_POINT
fun_mount
fun_rsync
fun_count


umount $MNT_POINT
exit 0