Zaszyfruj wiele plików jednocześnie

10

Piszę skrypt, który tworzy archiwa projektów, a następnie tworzy ich archiwa 7z, aby ułatwić mi zapisywanie określonych wersji i przechowywanie zaszyfrowanych kopii zapasowych.

Po wygenerowaniu archiwów i przejściu do fazy szyfrowania, chciałbym zaszyfrować pliki jednym wywołaniem, gpgjeśli to możliwe, aby użytkownik wprowadził hasło tylko raz. W przeciwnym razie musielibyśmy albo buforować hasło użytkownika w pamięci (czego naprawdę nie chciałbym robić), albo poprosić go o wprowadzenie i potwierdzenie hasła dla każdego zarchiwizowanego projektu (co jest gorsze).

Czy istnieje sposób na przekazanie wielu nazw plików, aby gpgszyfrowały je wszystkie za jednym razem?

Jeśli spróbuję:

$ gpg --cipher-algo AES256 --compression-algo BZIP2 -c project1.7z project2.7z

... Widzę następujący błąd w powłoce:

usage: gpg [options] --symmetric [filename]

Czy istnieje sposób na zrobienie tego, co chcę osiągnąć?

Naftuli Kay
źródło
2
Dlaczego najpierw używasz 7zip (przypuszczalnie) do kompresji, a potem każesz GnuPG, aby ponownie kompresował za pomocą bzip2? Nie widzę tego, aby zyskać dużo pod względem wydajności miejsca i widzę, że kosztuje to sporo procesora.
CVn
1
> Czy istnieje sposób na przekazanie wielu nazw plików do gpg w celu zaszyfrowania> wszystkich za jednym razem? Tak, spróbuj tej odpowiedzi
Anchan

Odpowiedzi:

5
Is there a way to pass multiple filenames to gpg to have it encrypt all of
them in one go?

Nie, nie ma.

Prawdopodobnie będziesz chciał przekazać hasło jedną z następujących opcji gpg (ta druga opcja byłaby najbezpieczniejsza):

--passphrase
--passphrase-file
--passphrase-fd
rsaw
źródło
10

Ponieważ GnuPG nie obsługuje tego bezpośrednio, sposobem na to byłoby dodanie kolejnej warstwy, np tar. Za pomocą .

tar c project1.7z project2.7z | gpg --cipher-algo AES256 --compression-algo BZIP2 -co projects.gpg

I wyodrębnić:

gpg -d projects.gpg | tar x

Zostaniesz z project1.7zi project2.7z. Skrypt może następnie zacząć od miejsca, w którym został przerwany.

bahamat
źródło
3

Jeśli chcesz wypróbować coś innego niż GPG, istnieją inne metody tworzenia kopii zapasowych szyfrowania wielu plików:

oryginalne źródło: http://www.obsd.hu/docs/Unix-backup-with-aes.txt

vi ~/.bashrc

backup() {
if [[ "$1" = "" ]]; then echo 'specify full path' && exit 1; fi
CURRENTDATE="`date +%F-%Hh`"
echo 'Did you do a screenshot of the Desktop and backup all the Bookmarks of the webbrowser and backup cronjobs, etc...?'
read
echo "START: `date`"
ORIGDIR="$1"; ORIGDIRNORM="`echo $ORIGDIR | sed 's/\/$//g'`"; tar cvf - "${ORIGDIRNORM}/" 2>/dev/null | gzip -9 - 2>/dev/null | openssl aes-256-cbc -salt -out "${ORIGDIRNORM}-backup-${CURRENTDATE}.tar.gz.aes" && cksum "${ORIGDIRNORM}-backup-${CURRENTDATE}.tar.gz.aes" >> checksum.txt
echo "END: `date`"
}

decrypt() {
if [[ "$1" = "" ]]; then echo 'specify full path' && exit 1; fi
CURRENTDATE="`date +%F-%Hh`"
echo 'This will decrypt the backup in the current working directory, are you sure?'
read
echo "START: `date`"
ORIGDIR="$1"
openssl aes-256-cbc -d -salt -in "${ORIGDIR}" | tar -xz -f -
echo "END: `date`"
}

Sposób użycia: po prostu użyj „backup DIRECTORY” do szyfrowania i „deszyfruj DIRECTORY.tar.gz.aes”

użytkownik67550
źródło
1

Udało mi się dziś zrobić coś takiego:

  1. Zmieniłem katalog na katalog zawierający pliki docelowe i uruchomiłem skrypt Bash, aby znaleźć wymagane nazwy_plików i wyświetlić je w pliku tekstowym, który wywołałem found.txt.

  2. Uruchomiłem skrypt Bash, prosząc gpg2 o odczytanie każdej nazwy pliku w pętli i do zmiennej pamięci, oraz w tej samej pętli, aby zaszyfrować go za pomocą mojego klucza podpisu i określając, że to do odczytu przeze mnie. gpg2 wyświetla wyskakujące okienko do wpisania hasła, które to okienko wyskakujące ma małe pole wyboru, w którym możesz zdecydować, aby hasło było aktywne dla sesji. Zła praktyka, ale nie taka zła, jeśli nie jesteś w sieci i wyłączasz się natychmiast po sesji szyfrowania.

  3. Jedynym problemem było to, że trzeba było obsłużyć ay / n. Więc usiadłem z palcem na klawiszu Y i zaszyfrowałem 51 plików nos w mniej niż minutę.


Skrypty podano poniżej:

Skrypt „find” był plikiem o nazwie FindFilesAndListtoTextfile.sh:

#! /usr/bin/bash
#Try this to list the files you want using the appropriate file identifier i.p.o "DSCN.*":

source="/home/myself/Whatever  #note no gaps on either side of the equal-to sign 
 target="/home/myself/Whatever/found.txt"
 find $source -name "*DSCN*" -type f > $target       

Skrypt szyfrujący nazywał się ReadFilenameAndEncrypt.sh:

#!/bin/bash
line="/home/myself/Whatever/found.txt"
while IFS='' read -r line || [[ -n "$line" ]]; do
    echo "Text read from file: $line"
    gpg2 -e -u mysecretkeyID -r mysecretkeyID "$line"
  done < "$1"

Ma to być uruchamiane jako zwykły użytkownik:

$ bash ReadFilenameAndEncrypt.sh found.txt

Mam nadzieję że to pomoże. Nie wymyśliłem, jak uniknąć t / n.

Aravind
źródło
0

Poniższe polecenie działa dla mnie, dopóki nie mam żadnych nazw plików ze spacjami.

for file in $(ls | grep -v ".gpg"); do gpg -c --cipher-algo AES256 --compress-algo 1 --batch --passphrase "<password>" $file && rm -f $file; done

Możesz także użyć polecenia find.

for file in $(find /home -type f | grep -v ".gpg"); do gpg -c --cipher-algo AES256 --compress-algo 1 --batch --passphrase "<password>" $file && rm -f $file; done

Na koniec, jeśli chcesz użyć pliku hasła, użyj:

--passphrase-file <filename>
Brian Mc
źródło
-1

Tak, istnieje prosty sposób:

for x in *; do 
  gpg -r (yourencrytionkey.com) -o $x.pgp -e $x
done
Tylko nauka
źródło
-1

echo „Wprowadź hasło:”

przeczytaj hasło

odnaleźć . -type f -exec gpg --passphrase $ hasło -c {} \;

Hmmmmmm GPG prosi z GraphicMessageBox hasło do każdego pliku.

Dlatego zdecydowałem się użyć CRYBULL (program do kryptografii, który stworzyłem) w C-ANSI. Możesz pobrać za darmo ze strony www.labolida.com

odnaleźć . -type f -exec crybull {} {} .cry $ hasło koduj \;

Leonardo Labolida
źródło
Spróbuj udzielić bardziej szczegółowych odpowiedzi. Ponadto na to pytanie już udzielono odpowiedzi. Zapoznaj się z często zadawanymi pytaniami, aby nauczyć się, jak poprawnie odpowiadać na pytania .
zuazo