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:
- Konfigūracijos failas: Scenarijus prasideda įkeliama konfigūracijos failu
config.sh
, kuriame saugomi du svarbūs parametrai:chat_id
irbot_token
. Šie parametrai naudojami Telegram API bendravimui ir failų siuntimui. Dėl saugumo rekomenduojama šiuos parametrus saugoti atskirame faile, nepasiekiamame pašalininkams. - Katalogo patikrinimas: Scenarijus patikrina, ar nurodytas katalogas egzistuoja ir ar jis yra tikras katalogas. Jei katalogas neegzistuoja arba nėra katalogas, scenarijus nutraukiamas.
- Laiko žymos sukūrimas: Sukuriama laiko žyma, kuri bus naudojama archyvo failo pavadinime. Tai leidžia lengvai atskirti skirtingus archyvus.
- GPG rakto gavimas: Scenarijus naudoja
gpg
komandą, kad gautų pirmąjį GPG raktą iš sistemos. Jei raktas nerastas, scenarijus nutraukiamas. - Failo vardo sukūrimas: Archyvo failo vardas suformuojamas sujungiant katalogo pavadinimą, laiko žymą ir plėtinį
.tar.gz
. - Archyvo sukūrimas: Naudojant
tar
komandą, sukuriamas katalogo archyvas. Jei archyvavimas nepavyksta, scenarijus nutraukiamas. - 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. - Neužšifruoto archyvo ištrynimas: Po sėkmingo užšifravimo neužšifruotas archyvas ištrinamas, kad liktų tik saugus šifruotas variantas.
- Siuntimas per Telegram: Naudojant
curl
komandą, užšifruotas archyvas siunčiamas per Telegram API į nurodytą pokalbių ID. Šį ID galima rasti pokalbio nustatymuose Telegram programoje. - Užšifruoto archyvo ištrynimas: Po sėkmingo siuntimo užšifruotas archyvas ištrinamas iš vietinio disko.
- 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
Rašyti komentarą