획득한 파일에 민감한 정보가 포함되어 있으므로 암호화된 파일을 얻으려면 bash 스크립트가 필요합니다.
스크립트에서 GPG 비밀번호를 묻는 메시지를 표시한 다음 이를 실행하여 암호화된 파일을 가져오도록 하고 싶습니다. 하지만 어떻게 해야할지 모르겠습니다. 암호화된 파일과 함께 서버에 키를 저장하고 싶지 않기 때문에 비밀번호를 입력하는 사용자가 있어야 합니다.
몇 가지 다른 방법을 살펴보면서 파일을 해독하고 암호화되지 않은 파일을 가져온 다음 삭제하고 싶지 않습니다. 스크립트에 문제가 발생할 경우 암호화되지 않은 파일을 남겨둘 가능성을 줄이고 싶습니다.
이런 식으로 파일의 GPG 출력을 얻는 방법이 있습니까? 아마도 STDOUT을 수집하고 구문 분석할 수 있습니다(GPG가 이런 방식으로 콘텐츠를 출력할 수 있는 경우).
또한 쉘 스크립트가 사용할 수 있는 파일을 암호화하는 다른 방법이 있다면 나는 그것을 알지 못하지만 다른 가능성이 열려 있습니다.
답변1
다음을 사용하여 이 작업을 수행할 수 있습니다.프로세스 교체.
. <(gpg -qd "$encrypted_filename")
예는 다음과 같습니다.
% cat > to-source <<< 'echo "Hello"'
% . ./to-source
Hello
% gpg -e -r [email protected] to-source
% . <(gpg -qd to-source.gpg)
Hello
gpg -d
파일을 디스크에 저장하지 않고 표준 출력으로 출력합니다. <()
사용하다선입선출, 실제 파일 데이터가 디스크에 기록되지는 않습니다.
bash에서 .
and source
는 동의어이지만 .
이식성이 더 높기 때문에(POSIX의 일부임) 여기서는 이를 사용했습니다. 그러나 이것은 <()
이식성이 좋지 않습니다. 내가 아는 한 bash, zsh, ksh88 및 ksh93에서만 지원됩니다. pdksh와 mksh에는공동 프로세스동일한 효과를 가질 수 있습니다.
답변2
stdin/stdout을 오염시키지 않는 다른 버전을 gpg-agent
사용하여 올바르게 설정했다면 다음을 수행할 수 있어야 합니다.pinentry-tty
source <( gpg --decrypt file.gpg )
source
이는 프로세스 대체를 사용하여 마치 파일인 것처럼 결과를 제공합니다 . 쉘이 처리를 마치면 특정 파일 데이터는 사라지지만, 그 이후에도 쉘 메모리에 있는 민감한 데이터에 대해서는 여전히 주의가 필요합니다.
답변3
가장 건전한 답변이 이미 제공되었으므로 여기에 미친 답변이 있습니다. 이 파일 시스템을 사용하십시오.
https://github.com/jseppanen/gpgfs
이렇게 하면 프로그램이 파이프와 통신하고 있다는 사실을 알아차리지 못할 것입니다.