저는 GnuPG를 파이프로 사용하여 백업을 암호화하려고 합니다(stdin에서 읽고 stdout에 쓰기). 비밀번호는 파일에서 읽혀집니다. 명령 예:
echo "mysecret" | gpg --passphrase-file password.key --batch --symmetric --cipher-algo AES256 > test.gpg
일반 사용자로 실행하면 잘 작동됩니다. 그러나 루트로 실행하면 다음과 같은 결과가 나타납니다.
gpg: gpg-agent is not available in this session
gpg: can't query passphrase in batch mode
gpg: error creating passphrase: invalid passphrase
gpg: symmetric encryption of `[stdin]' failed: invalid passphrase
--passphrase-file
루트 액세스 권한을 얻으려면 어떻게 해야 합니까 ?
--passphrase-fd 0
제안한 대로 사용할 수 없습니다.여기stdin은 암호화할 데이터이기 때문입니다. GPG 1.4.20(Ubuntu 16.04.5 LTS부터)을 사용하고 있습니다.
답변1
입력을 위해 추가 파일 설명자를 활용하는 해결 방법을 찾았습니다.
exec {FD}<password.key
echo "mysecret" | gpg --passphrase-fd ${FD} --batch --symmetric --cipher-algo AES256 > test.gpg
답변2
먼저 파일 시스템에 암호를 쓰는 것과 관련된 또 다른 답변을 구축하고 싶습니다. printf 명령의 출력을 파일 설명자로 캡처할 수 있습니다.
passphrase="topsecret"
exec {pw_fd}< <(printf "$passphrase")
echo "a total secret" | gpg --passphrase-fd ${pw_fd} --batch --symmetric --cipher-algo aes > test.gpg
exec {pw_fd}<&-
그런 다음 테스트하십시오.
gpg -d --passphrase -i test.gpg
gpg: AES.CFB encrypted data
gpg: encrypted with 1 passphrase
a total secret