Mam skrypt, który tworzy nocną kopię zapasową kilku katalogów.
Jest tworzony przy użyciu tar -czf
, a docelowa ścieżka do pliku tar.gz znajduje się w zamontowanym katalogu sieciowym. Plik wynikowy ma około 1,2 GB.
Szybkość sieci jest dość duża (kopiowanie z dysku sieciowego na lokalny odbywa się z prędkością ~ 28 MB / s).
Teraz chcę użyć szyfrowania z kluczem publicznym do zaszyfrowania pliku tar.gz przed przesłaniem go na dysk sieciowy i chciałbym wiedzieć, jaki jest najlepszy sposób.
Czy najpierw muszę utworzyć plik lokalnie, zaszyfrować go, a następnie skopiować? A może istnieje sposób na „przesłanie strumieniowe” danych wyjściowych tar przez proces szyfrowania i zapisanie wyników bezpośrednio na dysku sieciowym?
źródło
tar xz
być drugi zestaw poleceńtar -xz
?-
z
opcja dodaje wielePoniższy proces najpierw szyfruje plik na dysku lokalnym, a następnie może zostać przesłany przez sieć (lub zapisany w razie potrzeby)
Najpierw wygeneruj klucze publiczne i prywatne (wykonywane tylko raz):
Następnie przy każdej kopii zapasowej:
Wygeneruj długie losowe hasło, zapisz w pliku
echo -n "Tl4R6dnvWXiDeXr1LtpCNkyLG1" > key.txt
szyfruj plik za pomocą passphase
openssl enc -aes-256-cbc -pass file:key.txt < UNENCRYPTED_FILE > encrypted.dat
szyfruj hasło kluczem publicznym
openssl rsautl -encrypt -pubin -inkey key-public.pem < key.txt > enc.key.txt
Następnie zapisz encrypted.dat AND enc.key.txt w razie potrzeby.
Aby odszyfrować:
Odszyfruj zaszyfrowane hasło kluczem prywatnym
openssl rsautl -decrypt -inkey key.pem < enc.key.txt > key.txt
Odszyfruj plik
openssl enc -aes-256-cbc -d -pass file:key.txt < encrypted.dat > UNENCRYPTED_FILE
Jest to znacznie dłużej niż odpowiedź Floriana, ale zdecydowałem się go użyć, aby lepiej zrozumieć proces i nie polegać na zmiennych konfiguracyjnych GPG zależnych od serwera itp. Nie mogłem też znaleźć żadnej przydatnej dokumentacji GPG.
źródło
openssl rand 32 -out key.txt
Robię to z asymetrycznym szyfrowaniem klucza. Oznacza to, że mam klucz publiczny (który mogę udostępnić każdemu, kto chce mi przesłać zaszyfrowane pakiety), który pozwala mi zaszyfrować pakiet. Mam również klucz prywatny (którego nie udostępniam), który pozwala mi odszyfrować pakiet.
Moje polecenia do szyfrowania bieżącego katalogu roboczego: -e do szyfrowania, -r, aby określić „odbiorcę” lub klucz do użycia, -o, aby określić plik wyjściowy.
Aby odszyfrować do bieżącego katalogu roboczego:
Lub odszyfrować do standardowego pliku TGZ w celu późniejszego rozpakowania:
Oczywiście działa to tylko wtedy, gdy wygenerowałem już parę kluczy publiczny-prywatny i zainstalowałem ją z gpg. W moim przypadku zrobiłem to, korzystając z przewodnika Digital Ocean na https://www.digitalocean.com/community/tutorials/how-to-use-gpg-to-encrypt-and-sign-messages-on-an-ubuntu -12-04-vps . ABCD1234 w poleceniu szyfrowania odnosi się do jednego z kluczy publicznych zainstalowanych w moim systemie. W tym przewodniku omówiono także sposób udostępniania klucza publicznego i instalowania kluczy publicznych innych osób w celu wysyłania i odbierania zaszyfrowanych plików.
źródło
GnuPG jest tym, co wybrałem do tego procesu, a ponieważ powiedziałeś, że kroki deszyfrowania są nieprzejrzyste (zgadzam się w tym przypadku użycia), pracowałem również po tej stronie problemu. Sprawdź dzienniki kompilacji Travis-CI projektów, aby dowiedzieć się, jakie funkcje działają obecnie zgodnie z projektem, oraz plik travis.yml do śledzenia wraz z danymi wyjściowymi dzienników. Zasadniczo potrzebujesz trzech skryptów z tego projektu; skrypt keygen, skrypt pomocniczy deszyfrowania i nazwany skrypt nasłuchiwania potoków. Skrypt keygen i skrypt pomocniczy deszyfrowania powinien być używany na urządzeniu, które przeprowadzi deszyfrowanie, a nazwany skrypt nasłuchiwania potoków powinien znajdować się na urządzeniu szyfrującym preformowanie.
Zaszyfrowany skrypt nasłuchiwania nazwanych potoków akceptuje ciągi, ścieżki plików lub ścieżki katalogów po skonfigurowaniu i wyświetla zaszyfrowane wyniki w przewidywalny sposób.
Poniżej znajdują się przykładowe polecenia, które można umieścić w nocnym skrypcie kopii zapasowej do szyfrowania oraz do kompresji katalogów + szyfrowania
Do deszyfrowania będziemy chcieli, aby sprawdzić, w jaki sposób budować skrypty
.travis-ci/script_decrypt.sh
i.travis-ci/test_search_script_decrypt.sh
na jak załączonych ciągi zaszyfrowanych danych są odzyskiwane i jak pliki luzem / katalogi są przywracane.Oczywiście w przypadku tego eksperymentu najlepiej nie używać par klucza podstawowego (tak jakby napisano skrypt keygen) i nie należy go używać w ważnych danych, dopóki nie będziesz pewny, jak przywrócić go do postaci czytelnej.
źródło