Automatizuotas failų archyvavimas ir siuntimas per Telegram

 Šiame įraše aptarsiu scenarijų, kuris automatiškai sukuria failų archyvą, užšifruoja jį GPG raktu ir išsiunčia per Telegram. Šis scenarijus gali būti naudingas norint reguliariai kurti atsargines failų kopijas arba dalintis jais su kitais saugiai. Reikalingas ir Telegram bot’as. Aš naudoju didesnių failų papildomam backupui.

Kaip veikia scenarijus:

  1. Konfigūracijos failas: Scenarijus prasideda įkeliama konfigūracijos failu config.sh, kuriame saugomi du svarbūs parametrai: chat_id ir bot_token. Šie parametrai naudojami Telegram API bendravimui ir failų siuntimui. Dėl saugumo rekomenduojama šiuos parametrus saugoti atskirame faile, nepasiekiamame pašalininkams.
  2. Katalogo patikrinimas: Scenarijus patikrina, ar nurodytas katalogas egzistuoja ir ar jis yra tikras katalogas. Jei katalogas neegzistuoja arba nėra katalogas, scenarijus nutraukiamas.
  3. Laiko žymos sukūrimas: Sukuriama laiko žyma, kuri bus naudojama archyvo failo pavadinime. Tai leidžia lengvai atskirti skirtingus archyvus.
  4. GPG rakto gavimas: Scenarijus naudoja gpg komandą, kad gautų pirmąjį GPG raktą iš sistemos. Jei raktas nerastas, scenarijus nutraukiamas.
  5. Failo vardo sukūrimas: Archyvo failo vardas suformuojamas sujungiant katalogo pavadinimą, laiko žymą ir plėtinį .tar.gz.
  6. Archyvo sukūrimas: Naudojant tar komandą, sukuriamas katalogo archyvas. Jei archyvavimas nepavyksta, scenarijus nutraukiamas.
  7. Archyvo užšifravimas: Archyvas užšifruojamas GPG raktu, naudojant gpg komandą. Šifravimas užtikrina, kad tik gavėjas, turintis atitinkamą privatųjį raktą, galėtų iššifruoti ir pasiekti failus.
  8. Neužšifruoto archyvo ištrynimas: Po sėkmingo užšifravimo neužšifruotas archyvas ištrinamas, kad liktų tik saugus šifruotas variantas.
  9. Siuntimas per Telegram: Naudojant curl komandą, užšifruotas archyvas siunčiamas per Telegram API į nurodytą pokalbių ID. Šį ID galima rasti pokalbio nustatymuose Telegram programoje.
  10. Užšifruoto archyvo ištrynimas: Po sėkmingo siuntimo užšifruotas archyvas ištrinamas iš vietinio disko.
  11. Pranešimas apie sėkmę: Scenarijus išveda pranešimą apie sėkmingą operaciją ir įrašo žurnalą apie tai, kad archyvas buvo išsiųstas ir ištrintas.

Skriptas:

 

 


#!/bin/bash
 
# Įkelkite konfigūracijos failą
source config.sh
 
# Patikrinkite, ar nurodytas katalogas
if [ -z "$1" ]; then
    echo "Naudojimas: $0 "
    exit 1
fi
 
directory="$1"
 
# Patikrinkite, ar katalogas egzistuoja
if [ ! -d "$directory" ]; then
    echo "Katalogas '$directory' neegzistuoja arba nėra katalogas"
    exit 1
fi
 
# Sukurkite laiko žymą
stamp=$(date +%d%m%Y_%H%M%S)
 
# Gaukite pirmą GPG raktą
gpg_key_id=$(gpg --list-keys --with-colons | awk -F: '/^uid/{print $10}' | head -n1)
 
# Patikrinkite, ar yra GPG raktas
if [ -z "$gpg_key_id" ]; then
    echo "GPG raktas nerastas"
    exit 1
fi
 
# Sukurkite failo vardą
filename="$(basename "$directory")-$stamp.tar.gz"
 
# Sukurkite archyvą
tar -czvf "$filename" -C "$(dirname "$directory")" "$(basename "$directory")"
if [ $? -ne 0 ]; then
    echo "Klaida archyvuojant failus"
    logger -p user.err "Klaida archyvuojant failus: $directory"
    exit 1
fi
 
# Užšifruokite archyvą su GPG
gpg --output "$filename.gpg" --encrypt --recipient "$gpg_key_id" "$filename"
if [ $? -ne 0 ]; then
    echo "Klaida užšifruojant failą"
    logger -p user.err "Klaida užšifruojant failą: $filename"
    rm "$filename"
    exit 1
fi
 
# Ištrinkite neužšifruotą archyvą
rm "$filename"
if [ $? -ne 0 ]; then
    echo "Klaida ištrinant neužšifruotą failą"
    logger -p user.err "Klaida ištrinant neužšifruotą failą: $filename"
    exit 1
fi
 
# Siųskite užšifruotą archyvą per Telegram
curl -F chat_id="${chat_id}" -F document=@"$filename.gpg" https://api.telegram.org/bot${bot_token}/sendDocument
if [ $? -ne 0 ]; then
    echo "Klaida siunčiant failą"
    logger -p user.err "Klaida siunčiant failą per Telegram: $filename.gpg"
    rm "$filename.gpg"
    exit 1
fi
 
# Ištrinkite užšifruotą archyvą
rm "$filename.gpg"
if [ $? -ne 0 ]; then
    echo "Klaida ištrinant užšifruotą failą"
    logger -p user.err "Klaida ištrinant užšifruotą failą: $filename.gpg"
    exit 1
fi
 
echo "Operacija sėkmingai baigta"
logger -p user.info "Operacija sėkmingai baigta: $filename.gpg išsiųstas ir ištrintas"

Kam tai naudinga:

  • Atsarginės kopijos: Šis scenarijus gali būti naudojamas reguliariai kurti failų atsargines kopijas, užtikrinant, kad svarbūs duomenys būtų saugūs net ir gedimo atveju.
  • Failų dalijimasis: Scenarijus taip pat gali būti naudojamas saugiai dalintis failais su kitais. GPG šifravimas užtikrina, kad tik gavėjai, turintys atitinkamą privatųjį raktą, galėtų pasiekti failus.
  • Automatizavimas: Scenarijus gali būti automatizuotas naudojant cron arba kitą planavimo įrankį, kad reguliariai vykdytų archyvavimo ir siuntimo procesą be rankinio įsikišimo.

Komentarai

Populiarūs šio tinklaraščio įrašai

Configuring a NixOS firewall for everyday use

Setting up syncthing as a service on openSUSE and other Linux distributions

Monitoring SFTP server updates with Python