여러 파일을 한 번에 암호화

여러 파일을 한 번에 암호화

저는 특정 버전을 더 쉽게 저장하고 암호화된 백업을 유지할 수 있도록 프로젝트 아카이브를 생성한 다음 7z 아카이브를 생성하는 스크립트를 작성하고 있습니다.

아카이브를 생성하고 암호화 단계에 들어간 후 gpg가능하다면 사용자가 비밀번호를 한 번만 입력하도록 한 번의 호출로 파일을 암호화하고 싶습니다. 그렇지 않으면 사용자의 암호를 메모리에 캐시해야 하거나(정말 하고 싶지 않음) 보관된 모든 항목에 대해 암호를 입력하고 확인하도록 해야 합니다(이는 더 나쁩니다).

gpg여러 파일 이름을 전달하여 한 번에 모두 암호화할 수 있는 방법이 있습니까 ?

내가 이것을 시도하면 :

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

...셸에 다음 오류가 표시됩니다.

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

내가 달성하려는 것을 달성할 수 있는 방법이 있나요?

답변1

GnuPG는 이를 직접 지원하지 않으므로 이를 수행하는 방법은 예를 들어 tar.

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

그리고 다음을 추출합니다:

gpg -d projects.gpg | tar x

project1.7z및 가 남게 됩니다 project2.7z. 그러면 중단한 부분부터 스크립트를 계속할 수 있습니다.

답변2

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

아니요, 거기는 아닙니다.

다음 gpg 옵션 중 하나를 사용하여 비밀번호를 전달할 수 있습니다(후자가 가장 안전한 옵션입니다).

--passphrase
--passphrase-file
--passphrase-fd

답변3

현재 gpg에는 다음 옵션이 있습니다.

gpg --encrypt-files --recipient [email protected] *.txt

.txt.asc각 파일에 대해 하나의 파일을 생성합니다 .txt.

인용하다:

답변4

오늘은 다음과 같은 작업을 성공적으로 수행했습니다.

  1. 디렉터리를 대상 파일이 포함된 디렉터리로 변경하고 Bash 스크립트를 실행하여 필요한 file_names를 찾아 .txt라는 텍스트 파일에 나열합니다 found.txt.

  2. gpg2에게 루프의 각 파일 이름을 읽어서 메모리 변수에 넣고, 동일한 루프에서 내 서명 키로 암호화하고 내가 읽을 수 있도록 지정하도록 요청하는 Bash 스크립트를 실행하세요. gpg2는 비밀번호 입력을 위한 팝업을 표시하며, 여기에는 세션 전체에서 비밀번호 문구를 활성 상태로 유지하도록 선택할 수 있는 작은 확인란이 있습니다. 이는 나쁜 습관이지만, 당시 네트워크에 연결되어 있지 않고 세션을 암호화한 후 즉시 전원이 꺼진다면 그리 나쁘지 않습니다.

  3. 유일한 문제는 처리해야 할 y/n이 있다는 것입니다. 그래서 Y 키를 눌렀더니 1분도 안 되어 51개의 파일이 암호화되었습니다.


스크립트는 다음과 같습니다.

"찾기" 스크립트는 다음과 같은 스크립트입니다 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       

암호화 스크립트의 이름은 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"

일반 사용자로 실행됩니다.

$ bash ReadFilenameAndEncrypt.sh found.txt

도움이 되었기를 바랍니다. 아직 y/n을 피하는 방법을 찾지 못했습니다.

관련 정보