Saya memiliki skrip yang membuat cadangan beberapa direktori setiap malam.
Itu dibuat menggunakan tar -czf
, dan jalur file tar.gz tujuan ada di direktori jaringan yang di-mount. File yang dihasilkan berukuran sekitar 1.2Gb.
Kecepatan jaringan cukup cepat (penyalinan dari drive jaringan ke lokal terjadi pada ~ 28MB / detik).
Sekarang saya ingin menggunakan enkripsi kunci publik untuk mengenkripsi file tar.gz sebelum mentransfernya ke drive jaringan, dan ingin tahu apa cara terbaik untuk melakukannya.
Haruskah saya membuat file secara lokal terlebih dahulu, mengenkripsi, dan kemudian menyalinnya? Atau adakah cara untuk "stream" tar output melalui proses enkripsi, dan menulis hasilnya langsung ke drive jaringan?
sumber
tar xz
di set kedua perintah sebagaitar -xz
gantinya?-
z
opsi menambahkan banyakProses berikut mengenkripsi file pada disk lokal terlebih dahulu, dan kemudian dapat dikirim melalui jaringan (atau disimpan namun diperlukan)
Pertama, buat kunci publik dan pribadi (hanya dilakukan satu kali):
Kemudian, di setiap cadangan:
Buat frasa sandi acak panjang, simpan dalam file
echo -n "Tl4R6dnvWXiDeXr1LtpCNkyLG1" > key.txt
mengenkripsi file dengan frasa sandi
openssl enc -aes-256-cbc -pass file:key.txt < UNENCRYPTED_FILE > encrypted.dat
mengenkripsi frasa sandi dengan kunci publik
openssl rsautl -encrypt -pubin -inkey key-public.pem < key.txt > enc.key.txt
Kemudian simpan encrypted.dat DAN enc.key.txt di tempat yang diinginkan.
Untuk mendekripsi:
Dekripsi frasa sandi terenkripsi dengan kunci pribadi
openssl rsautl -decrypt -inkey key.pem < enc.key.txt > key.txt
Dekripsi file
openssl enc -aes-256-cbc -d -pass file:key.txt < encrypted.dat > UNENCRYPTED_FILE
Ini jauh lebih lama daripada anwser Florian, tetapi saya memutuskan untuk menggunakannya sehingga saya dapat lebih memahami prosesnya, dan tidak bergantung pada variabel konfigurasi GPG yang bergantung pada server, dll. Saya juga tidak dapat menemukan dokumentasi GPG yang berguna.
sumber
openssl rand 32 -out key.txt
Saya melakukan ini dengan enkripsi kunci asimetris. Itu berarti saya memiliki kunci publik (yang bisa saya bagikan dengan siapa pun yang saya ingin kirimi saya paket terenkripsi) yang memungkinkan saya untuk mengenkripsi paket. Saya juga memiliki kunci pribadi (yang tidak saya bagikan) yang memungkinkan saya mendekripsi paket.
Perintah saya untuk mengenkripsi direktori kerja saat ini: -e untuk mengenkripsi, -r untuk menentukan "penerima" atau kunci untuk digunakan, -o untuk menentukan file output.
Dan untuk mendekripsi ke direktori kerja saat ini:
Atau untuk mendekripsi file tgz standar untuk dibongkar nanti:
Tentu saja, ini hanya berfungsi jika saya telah membuat pasangan kunci publik-swasta dan memasangnya dengan gpg. Dalam kasus saya, saya telah melakukannya dengan menggunakan panduan Digital Ocean di https://www.digitalocean.com/community/tutorials/how-to-use-gpg-to-encrypt-and-sign-messages-on-an-ubuntu -12-04-vps . ABCD1234 dalam perintah enkripsi mengacu pada salah satu kunci publik yang diinstal pada sistem saya. Panduan ini juga mencakup cara berbagi kunci publik Anda dan menginstal kunci publik orang lain untuk mengirim dan menerima file terenkripsi.
sumber
GnuPG adalah apa yang saya pilih untuk digunakan untuk proses ini dan karena Anda telah menyatakan bahwa langkah-langkah dekripsi tempat buram (saya setuju dalam contoh penggunaan ini) saya juga telah bekerja di sisi masalah itu juga. Periksa log build Travis-CI proyek untuk mengetahui fitur apa yang saat ini berfungsi seperti yang dirancang dan file travis.yml untuk mengikuti bersama dengan output log. Pada dasarnya Anda akan membutuhkan tiga skrip dari proyek ini; skrip keygen, skrip pembantu dekripsi, dan skrip pendengar bernama pipa. Script keygen & script decryption helper harus digunakan pada perangkat yang akan membentuk sebelumnya decryption dan script pipe listener yang dinamai harus berada pada enkripsi preforming perangkat.
Script pendengar pipa bernama terenkripsi menerima string, path file, atau path direktori setelah pengaturan dan output hasil terenkripsi dengan cara yang dapat diprediksi.
Di bawah ini adalah contoh perintah yang dapat ditempatkan ke dalam skrip cadangan malam Anda untuk enkripsi dan untuk kompresi direktori + enkripsi
Untuk dekripsi Anda ingin memeriksa bagaimana skrip pembuatan
.travis-ci/script_decrypt.sh
&.travis-ci/test_search_script_decrypt.sh
untuk bagaimana string tambahan dari data terenkripsi dipulihkan dan bagaimana file massal / direktori dipulihkan.Tentu saja dengan hal-hal eksperimental ini yang terbaik adalah tidak menggunakan pares kunci utama (agak mengapa skrip keygen ditulis) dan tidak boleh digunakan pada data penting sampai Anda yakin bagaimana mengembalikannya ke bentuk yang dapat dibaca.
sumber