Verileri Yedeklere Yedeklemek için GPG ile Duplicity Nasıl Kullanılır

Giriş

Duplicity, yerel veya uzak bir depoda depolanmak üzere şifrelenmiş tar hacimleri üreten Python'da yazılmış bir komut satırı yardımcı programıdır. Arşivlerini şifrelemek ve imzalamak için GNU Privacy Guard'ı (GPG) kullanır ve rsync algoritmasını artan, yer tasarrufu sağlayan yedekler oluşturmak için kullanır. Yedekler, yerel dosya deposu, SFTP veya FTP sunucuları ve S3 uyumlu nesne depoları dahil olmak üzere çeşitli depolara iletilebilir.

Bu öğreticide, Duplicity'yi kuracağız ve proje verilerini S3 uyumlu bir nesne depolama hizmeti olan DigitalOcean Spaces'a nasıl yedekleyeceğimizi gözden geçireceğiz. Bu amaçla bir Spaces havuzu oluşturacağız ve verileri el ile nasıl yedekleyeceğimizi ele alacağız. Son olarak, aşamalı ve haftalık tam yedekleme programları oluşturacak bir komut dosyası oluşturarak bu süreci otomatik hale getireceğiz.

Ön şartlar

Bu eğitim için, ihtiyacınız olacak:

  • Bir Ubuntu 16.04 sunucusu, Ubuntu 16.04 öğretici ile Başlangıç ​​Sunuculu kurulumumuzu takiben kuruldu. Bu eğiticiyi uyguladıktan sonra, root olmayan bir sudo istihdamınız sağlayacaktır.

  • Bir DigitalOcean Alanı ve API Anahtarı Oluşturma İznini bir DijitalOcean Alanı ve API anahtarı. Alanınız için uygun değilsiniz:

    • Erişim anahtarı
    • Gizli anahtar
    • Alan URL'si
    • Kova adı
  • sudo apt-add-repository ppa: yineleme takımı / ppa

Ayrıca Amazon Web Servislerine arayüz sağlayan bir Python paketi olan Boto'ya erişmek için python-boto paketini de yükleyeceğiz. Bu, Uzayların AWS S3 API'siyle birlikte çalışabilirliğinden yararlanmamıza yardımcı olacaktır. Bu sürüm, Ubuntu sunucu görüntüsümüzle birlikte gelen Python sürümü ile uyumlu olduğundan, resmi Ubuntu depolarından python-boto kuracağız. Boto3'ü kullanmayı tercih ederseniz, Python 3.3+ ile özellik uyumluluğu hala geliştirilmekte olsa da, bunu kaynaktan yükleyebilirsiniz.

python-boto boto'ya ek olarak, GPG anahtarlarımızı oluşturmak için gerekli olan entropiyi oluşturmamıza yardımcı olacak bir araç olan Haveged'i de kuracağız. Bu anahtarları oluşturmak için, GPG sistemimizde entropi veya öngörülemezlik seviyesine çeker. haveged yükleme, anahtar oluşturma sürecini hızlandırmamıza yardımcı olacaktır.

Bu paketleri yüklemeden önce yerel depo dizinini güncelleyin:

  • sudo apt-get güncelleştirmesi

Sonra yüklemek duplicity , python-boto ve haveged yazarak:

  • sudo apt-get install duplicity var python-boto

Kurulumu onaylamanız istendiğinde y tuşuna basın. Artık sistemimizde Duplicity var ve proje klasörlerimizi ve konfigürasyon dosyalarımızı oluşturmaya hazırız.

Yedekleme Dizini Oluşturma

Yedekleme işleminin nasıl çalıştığını göstermek için, bazı örnek verilerle birlikte, kök olmayan kullanıcının ana dizinindeki yedeklerimiz için bir dizin oluşturacağız. sammy_backups :

  • mkdir ~ / Instagram Hesabındaki Resim ve Videoları sammy_backups

Ardından, historical_sharks.txt adlı örnek bir proje dosyası oluşturun:

  • echo "Eski Megalodon köpekbalığı 59 metreye kadar olan uzunluklara ulaştı ve tarihin en korkunç avcılarından biri olarak kabul ediliyor." >> ~ / sammy_backups / historical_sharks.txt

Yedekleme dizinimiz ve test verilerimizle, root olmayan kullanıcılarımız için bir GPG anahtarı oluşturmaya hazırız.

GPG Anahtarları Oluşturma

Ardından, kullanıcı için bir GPG anahtar çifti oluşturacağız. Bilginin güvenli bir şekilde iletilmesini sağlamak için GPG, ortak anahtar şifrelemesini kullanır. Bu bizim bağlamımızda ne anlama geliyor, verilerin kamu anahtarımıza şifrelenmesi ve havuzumuza gönderilmesi. GPG anahtarları ve şifreleme hakkında daha fazla bilgi için, Mesajları İmzalamak ve Şifrelemek için GPG Nasıl Kullanılır hakkında eğitimimize bakın.

Anahtarlıklar, kullanıcı hesabımızda, anahtarları oluşturduğumuzda oluşturulacak ~/.gnupg adlı bir dizinde saklanacaktır. duplicity komutunu kullandığımızda, anahtar çiftimize işaret eden bir ortak anahtar belirleyici belirleyeceğiz. Bu tanımlayıcıyı kullanmak, veri şifrelemeyi ve özel anahtara sahip olduğumuzu doğrulayan imzayı etkinleştirir. Şifrelenmiş veriler, dosya boyutundan çok daha fazlasını ve dosyaların kendilerinden yükleme süresini zorlamanın mümkün olduğu depomuza iletilecektir. Bu, kullanıcımızın özel anahtarla istediği zaman geri yükleyebileceği verilerinizi korur.

GPG, sunucumuzda varsayılan olarak kurulu olmalıdır. Bunu test etmek için şunu yazın:

  • gpg - dönüşüm

GPG'nin kurulu olduğunu doğruladıktan sonra, aşağıdaki gibi bir anahtar çifti oluşturabilirsiniz:

  • gpg --gen-anahtar

Anahtarlarınızı yapılandırmak için bir dizi soru sorulur:

  • Anahtar türü. (1) RSA ve RSA'yı (varsayılan) seçin .
  • Anahtarın boyutu. ENTER tuşuna basmak, varsayılan 2048 bit boyutunu onaylayacaktır.
  • Anahtar son kullanma tarihi. 1y girerek, biz bir yıl sonra sona erer bir anahtar oluşturur.
  • Seçimlerini onaylayın. Bunu y girerek yapabilirsiniz.
  • Kullanıcı Kimliği / Gerçek adı. Adını yaz .
  • E. Email adresinizi giriniz.
  • Yorum Yap. Burada imzanızla görülebilecek isteğe bağlı bir yorum girebilirsiniz.
  • Değişim (N) ame, (C) ihmal, (E) posta veya (O) kay / (Q) uit? Devam etmeye hazırsanız O yazın.
  • Parola girin. Burada bir şifre girmeniz istenecektir. Bu şifreyi not aldığınızdan emin olun . Bu eğiticinin geri kalanında your-GPG-key-passphrase olarak geri döneceğiz.

Bu ayarları oluşturduktan sonra, gpg , sistemdeki entropi düzeyine bağlı olarak anahtarları üretecektir. haveged , anahtarlarımız çok hızlı veya hemen oluşturulmalıdır. Aşağıdakileri içeren çıktıyı göreceksiniz:

Output...
gpg: /home/sammy/.gnupg/trustdb.gpg: trustdb created
gpg: key your-GPG-public-key-id marked as ultimately trusted
public and secret key created and signed.
...

Yerel ortam değişkenlerimizi yapılandırmak için bir sonraki bölümde kullanacağımızdan, your-GPG-public-key-id not edin.

Manuel Yedeklemeler Oluşturma

Şimdi çevre değişkenlerini ayarlayacağız, böylece duplicity komutunu çalıştırırken komut satırında herhangi bir gizli bilgi girmemize gerek kalmayacak. Bu değişkenler mevcut oturumumuz sırasında kullanıcılarımıza sunulacak ve bunları daha sonra kullanmak üzere kullanabilmeleri için gizli bir dizinde saklayacağız. Ortam değişkenleri olarak tanımlayacağımız, duplicity ihtiyaç duyacağı değişkenler, Spaces Access Key ve Secret'umuzu ve GPG genel anahtar kimliğimizi ve şifremizi içerir.

Başlamak için, kullanıcının giriş dizininde yapılandırma dosyasını saklayacak gizli bir dizin oluşturalım:

  • mkdir ~ / .duplicity

Ardından, export ifadelerini kullanarak yapacağımız değişkenlerimizi tanımlamak için .env_variables.conf adlı bir dosya oluşturalım. Bu ifadeler, değişkenleri daha sonra kullanmak için programlarda kullanılabilir hale getirecektir. Dosyayı yazarak açın:

  • nano ~ / .duplicity / .env_variables.conf

Dosya içinde, Spaces Access Key ve Secret ile GPG ortak anahtar kimliğinizi ve parolanızı ayarlayın:

~/.duplicity/.env_variables.confexport AWS_ACCESS_KEY_ID="your-access-key"
export AWS_SECRET_ACCESS_KEY="your-secret-key"
export GPG_KEY="your-GPG-public-key-id"
export PASSPHRASE="your-GPG-key-passphrase"

İşiniz bittiğinde dosyayı kaydedin ve kapatın.

Artık sadece root olmayan mevcut kullanıcımızın okuma ve yazma erişimine izin vermesi için dosya üzerinde izinler ayarlayabiliriz:

  • chmod 0600 ~ / .duplicity / .env_variables.conf

Bu değişkenleri geçerli Bash oturumunda kullanmak için aşağıdakileri kullanarak yapın:

  • kaynak ~ / .duplicity / .env_variables.conf

Sonra, çalışacağı duplicity bizim bir manuel, tam yedekleme oluşturmak için ~/sammy_backups dizininde. full eylem olmadan duplicity çalıştırılması, ilk tam yedeklemeyi ve ardından artımlı yedeklemeleri oluşturur. Komutu ilk kullanımımızda tam bir yedek oluşturacağız, ancak bu dizinin başka bir tam manuel yedeğini oluşturmak isterseniz, full eylemi belirtmeniz gerekir.

Komutumuzda tanımlayacağımız diğer seçenekler şunlardır:

  • --verbosity : Bu bizim çıktımızda istediğimiz bilgi düzeyini belirleyecektir. Varsayılan notice ayarından daha fazla ayrıntı sağlayacak olan info belirteceğiz.
  • --encrypt-sign-key : Bu söyleyecektir duplicity biz ile özdeşleşmiş çiftinin kamu anahtarına şifrelemek için your-GPG-public-key-id içinde GPG_KEY değişkeni. Ayrıca, imzalama işlevini etkinleştirmek için aynı tanımlayıcıyı kullanmak için duplicity söyleyecektir.
  • --log-file : Bu seçenek, diğer programlarda da kullanılabilen günlük dosyaları için bir konum belirleyecektir. Bu, sorun gidermemiz gerektiğinde bakmamız için bize kolay bir yer verecektir. Günlük dosyası konumunu /home/sammy/.duplicity/info.log olarak /home/sammy/.duplicity/info.log .

Son olarak, yedeklediğimiz dizini ve depo bitiş noktasını belirleyeceğiz. Kullanıcının ev dizinindeki ~/sammy_backups dizinini ~/sammy_backups . s3://spaces_endpoint/bucket_name/ , aşağıdaki bilgileri kullanarak tanımlayacağımız s3://spaces_endpoint/bucket_name/ olacaktır: s3://spaces_endpoint/bucket_name/ . Uç noktanızı ve kova adınızı aşağıdaki gibi belirleyebilirsiniz: Alanınızın URL'si https://sammys-bucket.nyc3.digitaloceanspaces.com , sammys-bucket sizin kova adınızdır ve nyc3.digitaloceanspaces.com sizin uç nyc3.digitaloceanspaces.com . .

duplicity komutumuz eninde sonunda şöyle görünecektir:

  • duplicity --verbosity info --encrypt-sign-key = $ GPG_KEY --log dosyası /home/sammy/.duplicity/info.log / home / sammy / sammy_backups \
  • s3: //nyc3.digitaloceanspaces.com/sammys-bucket/

Bu komutu çalıştırdıktan sonra, çıktıyı aşağıdaki gibi göreceğiz:

Output...
--------------[ Backup Statistics ]--------------
StartTime 1522417021.39 (Fri Mar 30 13:37:01 2018)
EndTime 1522417021.40 (Fri Mar 30 13:37:01 2018)
ElapsedTime 0.01 (0.01 seconds)
SourceFiles 2
SourceFileSize 4226 (4.13 KB)
NewFiles 2
NewFileSize 4226 (4.13 KB)
DeletedFiles 0
ChangedFiles 0
ChangedFileSize 0 (0 bytes)
ChangedDeltaSize 0 (0 bytes)
DeltaEntries 2
RawDeltaSize 130 (130 bytes)
TotalDestinationSizeChange 955 (955 bytes)
Errors 0
-------------------------------------------------

İstenildiği gibi Alanınıza yüklenen dosyaların olup olmadığını kontrol etmek için, DigitalOcean kontrol panelindeki Spaces sayfanıza, orada olduklarını kontrol etmek için gidebilirsiniz.

Dosyaları Geri Yükleme

Verilerimizi geri yükleyebildiğimizi test etmek için, şimdi örnek dosyamızı kaldıracağız ve depolarımızdan geri yükleyeceğiz. Duplicity ile dosyaları geri yüklemek için --file-to-restore seçeneğini kullanabiliriz. duplicity komutumuzdaki öğelerin sırasını tersine çevirmek de gereklidir: Depo URL'si artık kaynak olarak işlev görecek ve yedek dizinimiz geri yüklenen dosyamızın hedefi olacaktır.

Dosyayı yazarak kaldırın:

  • rm ~ / sammy_backups / historical_sharks.txt

Dosyanın kaldırıldığından emin olmak için kontrol edin:

  • cat ~ / sammy_backups / historical_sharks.txt

Aşağıdaki çıktıyı görmelisiniz:

Outputcat: /home/sammy/sammy_backups/historical_sharks.txt: No such file or directory

Sonra, bu dosyayı Space'imizden geri alalım. – Geri --file-to-restore seçeneği, --file-to-restore istediğimiz dosyanın yolunu belirtmemize olanak tanır. Bu yol, yedeklediğimiz dizine göre olmalıdır; bizim durumumuzda, bizim göreceli yolumuz historical_sharks.txt olacaktır. Ayrıca, dosyamızı havuzumuzdan geri yüklediğimizi belirtmek için Alan URL'mizin ve yedek dizinimizin sırasını da tersine çevireceğiz:

  • duplicity --verbosity info --encrypt-sign-key = $ GPG_KEY --log dosyası /home/sammy/.duplicity/info.log --file-to-restore historical_sharks.txt \
  • s3: //nyc3.digitaloceanspaces.com/sammys-bucket /home/sammy/sammy_backups/historical_sharks.txt

Çıkışı aşağıdaki gibi göreceksiniz:

Output...
Processing local manifest /home/sammy/.cache/duplicity/d9911d387bb9ee345a171141106ab714/duplicity-full.20180402T170008Z.manifest (195)
Found 1 volumes in manifest
Deleting /tmp/duplicity-e66MEL-tempdir/mktemp-_A24DP-6
Processed volume 1 of 1

Tekrar çalışan cat , restore edilen historical_sharks.txt dosyasının içeriğini çıkarır:

  • cat ~ / sammy_backups / historical_sharks.txt

OutputThe ancient Megalodon shark reached lengths of up to 59 feet, and is widely regarded as one of history's most fearsome predators.

Şimdi ~/sammy_backups dizininin ve yedeklememizin geri yüklediği verileri manuel olarak yedekledik, yedekleme işlemini otomatik hale getirmeye hazırız.

Yedeklemeleri Otomatikleştirme

Yedekleme işlemini otomatikleştirmek, ~/sammy_backups dizinindeki verilerin kurtarılabilir ve güncel kalmasını sağlamaya yardımcı olabilir. Her hafta tam yedekleme ve aksi takdirde artımlı yedeklemeler içeren bir yedekleme programı oluşturmak için cron iş zamanlayıcıyı kullanabiliriz. Görevleri zamanlamak için cron kullanma hakkında daha fazla bilgi edinmek için, bir VPS'de Cron ve Anacron ile Rutin Görevler Nasıl Zamanlanır?

İlk olarak, ~/.duplicity bir yedek komut dosyası oluşturalım:

  • nano ~ / .duplicity / .backup.sh

Bu dosyada, ilk önce bu komut dosyasının Bash kabuğundan çalıştırılacağını belirteceğiz:

~/.duplicity/.backup.sh#!/bin/bash

Ardından, source ve duplicity komutlarımızla kullanmak için bir HOME değişkeni oluşturacağız. Vurgulanan kullanıcı adı, yedek dizin ve kova ismini bilgilerinizi değiştirdiğinizden emin olun:

~/.duplicity/.backup.sh...
HOME="/home/sammy"

source "$HOME/.duplicity/.env_variables.conf"

duplicity \
--verbosity info \
--encrypt-sign-key="$GPG_KEY" \
--full-if-older-than 7D \
--log-file "$HOME/.duplicity/info.log" \
/home/sammy/sammy_backups \
s3://nyc3.digitaloceanspaces.com/sammys-bucket/

source ve duplicity komutları, el ile yedeklememizi oluşturduğumuzda yaptıklarıyla aynı işi yapıyorlar: source , ortam değişkenlerimizi geçerli içeriğe yüklerken, duplicity , depoya göndermek için şifrelenmiş tar hacimleri oluşturur. Seçeneklerimiz, --full-if-older-than seçeneğinin eklenmesi haricinde, aynı kalır. 7D ayarlanan bu seçenek, son tam yedekleme yedi günden eski olduğunda, her hafta tam yedeklemenin gerçekleşeceğini belirtir.

Komutumuzdaki son öğeler, ortam değişkenlerimizi güvenlik önlemi olarak kaldıracak komutları unset :

~/.duplicity/.backup.sh...
unset AWS_ACCESS_KEY_ID
unset AWS_SECRET_ACCESS_KEY
unset GPG_KEY
unset PASSPHRASE

Komut dosyası şöyle görünecektir:

~/.duplicity/.backup.sh#!/bin/bash

HOME="/home/sammy"

source "$HOME/.duplicity/.env_variables.conf"

duplicity \
--verbosity info \
--encrypt-sign-key="$GPG_KEY" \
--full-if-older-than 7D \
--log-file "$HOME/.duplicity/info.log" \
/home/sammy/sammy_backups \
s3://nyc3.digitaloceanspaces.com/sammys-bucket/

unset AWS_ACCESS_KEY_ID
unset AWS_SECRET_ACCESS_KEY
unset GPG_KEY
unset PASSPHRASE

Komut dosyasından memnun olduğunuzda, dosyayı kaydedip kapatabilirsiniz. Yalnızca mevcut olmayan sudo kullanıcımızın dosyayı okuma, yazma ve yürütme yeteneğine sahip olmasını sağlamak için izinler de ayarlayacağız:

  • chmod 0700 ~ / .dizlicity / .backup.sh

Son olarak, kullanıcının crontab dosyasını düzenleyerek yedekleme planımızı otomatik hale getirebiliriz. Yazarak düzenlemek için bu dosyayı açın:

  • crontab -e

Bu dosyayı ilk defa düzenlediğimiz için, bir editör seçmemiz istenecek:

crontabno crontab for root - using an empty one
Select an editor. To change later, run 'select-editor'.
1. /bin/ed
2. /bin/nano <---- easiest
3. /usr/bin/vim.basic
4. /usr/bin/vim.tiny
Choose 1-4 [2]:
...

Nano için 2 seçebilir veya seçtiğiniz editöre karşılık gelen sayıyı girebilirsiniz.

Dosyanın alt kısmında, komut dosyasının ne kadar sıklıkla çalıştırılması gerektiğini belirten bir satır ekleyeceğiz. İşlevlerini test etmek için zaman aralığımızı aşağıdaki gibi iki dakikaya ayarlayabiliriz:

crontab...

*/2 * * * * /home/sammy/.duplicity/.backup.sh

Dosyayı kaydedin ve kapatın. İki dakika sonra, artımlı yedekleme dosyalarını görebileceğiniz DigitalOcean kontrol panelindeki Spaces sayfanıza gidebilirsiniz. Artımlı yedekleriniz için kullanmak istediğiniz zaman aralığını belirlemek için şimdi crontab dosyasını değiştirebilirsiniz.

Sonuç

Bu eğiticide, belirli bir dizinin içeriğinin Spaces deposuna nasıl yedekleneceğini ele aldık. Veri havuzumuzu depolamak için bir yapılandırma dosyası kullanarak, örnek bir dosyayı geri yükleyerek ve otomatik bir yedekleme zamanlamasıyla test ettiğimiz verilerin bir manuel yedeğini oluşturduk.

Duplicity hakkında daha fazla bilgi için proje web sitesini ve duplicity man sayfasını kontrol edebilirsiniz. Bu dokümantasyon Duplicity'nin birçok özelliğini kapsamakta ve tam sistem yedeklemelerinin oluşturulmasına rehberlik sunmaktadır.

Bir önceki yazımız olan DigitalOcean Özel Ağlar Üzerinden Dosya Aktarımı (Şifreler) başlıklı makalemizi de okumanızı öneririz.

About This Author

Comments are closed

%d blogcu bunu beğendi: