비밀번호를 묻지 않고 gpg 파일을 추출하려면 다음 명령을 사용하고 싶습니다.
gpg --passphrase 1234 file.gpg
그런데 비밀번호를 물어보네요. 왜?
이것도 동일한 동작을 갖습니다.
gpg --passphrase-file passfile.txt file.gpg
나는 Ubuntu와 gnome 3를 사용하는데, 그것이 Fedora에서 실행되고 있었던 것을 기억합니다.
답변1
나는 당신과 똑같은 상황에 있습니다 (Fedora에서는 작동하지만 Ubuntu에서는 작동하지 않습니다). 내가 찾은 확실한 해결 방법은 다음과 같습니다.
echo your_password | gpg --batch --yes --passphrase-fd 0 your_file.gpg
설명: 전달하면 파일에서 읽는 대신 STDIN에서 읽습니다 0
. --passphrase-fd
따라서 비밀번호를 파이핑하면 --passphrase-fd
지정한 비밀번호 문자열이 허용됩니다.
답변2
2017년 12월 4일에 업데이트되었습니다. (비밀번호 프롬프트를 방지하려면 --batch를 추가하세요)
옵션을 추가해야 할 수도 있습니다 --batch
.
그리고. 당신이 사용하는 경우수신기 키 쌍를 추가할 수도 있습니다 --pinentry-mode loopback
.
버전 2부터 프롬프트가 없는지 확인하려면 GPG
이 옵션이 필요합니다 ... 자, 살펴보세요:--batch
$ gpg --version
gpg (GnuPG) 2.1.18
libgcrypt 1.7.6-beta
Copyright (C) 2017 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Home: /home/user /.gnupg
Supported algorithms:
Pubkey: RSA, ELG, DSA, ECDH, ECDSA, EDDSA
Cipher: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH,
CAMELLIA128, CAMELLIA192, CAMELLIA256
Hash: SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
Compression: Uncompressed, ZIP, ZLIB, BZIP2
노력하다:
$ newdir=$(mktemp -d)
$ cd $newdir
$ seq 1 10 | gpg -c --batch --passphrase 1234 -o file.gpg -
$ ls -ltr
total 4
-rw-r--r-- 1 user user 91 Dec 4 15:42 file.gpg
$ hd file.gpg
00000000 8c 0d 04 07 03 02 ea fa d0 d3 2b 9a ea 06 df d2 |..........+.....|
00000010 4a 01 ed 50 74 ff 27 45 0e 6c 94 74 db e9 8a a5 |J..Pt.'E.l.t....|
00000020 03 9f 67 a0 73 97 e9 15 6b 56 a0 f0 88 71 85 a8 |..g.s...kV...q..|
00000030 dc 41 71 9f fa 3b f9 9d af ac 80 eb f4 f7 28 19 |.Aq..;........(.|
00000040 9f be 75 47 e6 d8 00 3e f6 60 f1 00 5e 63 57 ef |..uG...>.`..^cW.|
00000050 14 c3 4b 20 ff 94 03 03 c1 fc 98 |..K .......|
0000005b
좋은 것 같아요! 지금은 괜찮아요:
$ gpg -d --batch --passphrase 1234 file.gpg
gpg: AES encrypted data
gpg: encrypted with 1 passphrase
1
2
3
4
5
6
7
8
9
10
인수가 제공되지 않으면 -d
(SO의 질문과 동일한 구문) 해독된 데이터가 file.gpg
새 데이터로 추출됩니다 file
.
$ gpg --batch --passphrase 1234 file.gpg
gpg: WARNING: no command supplied. Trying to guess what you mean ...
gpg: AES encrypted data
gpg: encrypted with 1 passphrase
$ ls -ltr
total 8
-rw-r--r-- 1 user user 91 Dec 4 15:42 file.gpg
-rw-r--r-- 1 user user 21 Dec 4 15:44 file
$ cat file
1
2
3
4
5
6
7
8
9
10
이것은 훌륭하게 작동합니다!
$ cd -
$ rm -fR $newdir
$ unset newdir
전체 샘플수신자 키 파일:
먼저 임시 환경을 만듭니다.
newdir=$(mktemp -d)
cd $newdir
export GNUPGHOME=$newdir
echo YourPassword >password.txt
gpgconf --kill gpg-agent # Required, if agent_genkey fail...
gpg --generate-key --batch <<eoGpgConf
%echo Started!
Key-Type: default
Key-Length: default
Subkey-Type: default
Name-Real: Full Name There
Name-Comment: Something funny
Name-Email: [email protected]
Expire-Date: 0
Passphrase: $(<password.txt)
%commit
%echo Done.
eoGpgConf
gpg: keybox '/tmp/tmp.xU5Ldyr4iB/pubring.kbx' created
gpg: Started!
gpg: agent_genkey failed: No such file or directory
gpg: key generation failed: No such file or directory
gpg: Done.
잘.
gpgconf --kill gpg-agent
gpg --generate-key --batch <<eoGpgConf
%echo Started!
...
eoGpgConf
gpg: Started!
gpg: key 43E6B96CAFABDEDF marked as ultimately trusted
gpg: directory '/tmp/tmp.xU5Ldyr4iB/openpgp-revocs.d' created
gpg: revocation certificate stored as '/tmp/tmp.xU5Ldyr4iB/openpgp-revocs.d/DF223E1612CF917DC3BD42AA43E6B96CAFABDEDF.rev'
gpg: Done.
키 ID 받기
그래서 지금
gpg -k
/tmp/tmp.xU5Ldyr4iB/pubring.kbx
-------------------------------
pub rsa3072 2020-06-19 [SC]
DF223E1612CF917DC3BD42AA43E6B96CAFABDEDF
uid [ultimate] Full Name There (Something funny) <[email protected]>
sub rsa3072 2020-06-19 [E]
(pub 지문의 마지막 8자는 키 별칭으로 사용할 수 있습니다.)
gpg -k [email protected]| sed -e '/^pub/{N;s/.*\(.\{16\}\)/\1/;p;s/^.\{8\}//;q};d'
43E6B96CAFABDEDF
AFABDEDF
또는 심지어 검색세게 때리다변수는 --with-colons
.
while IFS=: read -r typeOfRec _ _ _ keyId _; do
case $typeOfRec in pub ) break ;; esac
done < <(gpg --with-colons -k [email protected] )
declare -p keyId
declare -- keyId="43E6B96CAFABDEDF"
암호화
이제 할 수 있습니다!
seq -f "%'8g" 990 5 1015 |
gpg --batch --armor --recipient "$keyId" --encrypt --output file.gpg
다음과 같은 것을 줄 것입니다 :
cat file.gpg
-----BEGIN PGP MESSAGE-----
hQEOA5BNpEVKPGsfEAP/XutJp7ME3I1MqG0vZyIS8w+npPQMPicIpQUwM4OVO1rX
2lhrymp0zGqxAH7s9Dh9YJNRA/9zYCO4/vghtnnl/zg10vILs9btgLXY+aupgoQ9
nifnVC8JJ1DC+hZZrIHyzS73BsjufWhpbwURYc7EgIMGKu2TRiy5I8+0aZ4zAtID
/ApL0sTBQ9hqmIatzaYbX9ajmDf1vvtE2/s3MUFA/hIqew2MVMhlb4RjyT7ix03P
LmCH2Mfy88VGr59eSUoZq+CPMDSZpXxbE2LfyPHYsObraO+a6FdVHhj2xcw/tnDO
TcNHTKnTRJSb9sfLAtJmE9eaxebkl27T+UvqyJUG4dgu0lABadboNaEidlrCYLNi
icR19UX0G7E50+i3iKvw0u81YtciYyOnpHvgazb5QbqJNN5P8izC4J3FqW7HaTDI
xnf+8IaX2Vqrq5+k4qLR7h5Vcw==
=1fb5
-----END PGP MESSAGE-----
참고: >=2.2
다음 버전은 더 이상 필요하지 않습니다.gpg``--batch
seq -f "%'8g" 990 5 1015 |
gpg -aer "$keyId" >file.gpg
거의 동일한 효과를 가지게 됩니다.
암호 해독
그 다음에
gpg --decrypt --pinentry-mode loopback --passphrase-file password.txt --batch file.gpg
또는
gpg -d --pinentry-mode loopback --passphrase-file password.txt --batch file.gpg
생산할 것입니다:
gpg: encrypted with 3072-bit RSA key, ID 58020687E0746339, created 2020-06-19
"Full Name There (Something funny) <[email protected]>"
990
995
1'000
1'005
1'010
1'015
그러나 >=2.2
버전부터 다음을 gpg
사용할 수 있습니다.
gpg -qd --passphrase "$(<password.txt)" file.gpg
990
995
1'000
1'005
1'010
1'015
답변3
gpg 2.x 버전의 경우 를 사용할 필요가 없습니다 --batch
.
--pinentry-mode loopback
--passphrase
&와 함께 사용되며 --passphrase-file
파일 이름이 충돌하는 경우 새 정보를 입력할 수 있습니다. 예:
gpg --pinentry-mode loopback --passphrase-file=file encrypted.gpg
...
File 'encrypted' exists. Overwrite? (y/N)n
Enter new filename: f2
--batch
그게 빨리 실패할 것 같지는 않아요 ....failed: File exists
(Debian Stable/Stretch의 gpg 2.1.18에서 테스트되었습니다. 중요한 옵션을 무시하는 이러한 동작은 --passphrase
아직 버그가 아니라면 실제로 버그여야 합니다)
답변4
매뉴얼 페이지에 따라 gpg(GnuPG) 2.2.7을 사용하는 경우,
--passphrase-fd n
파일 설명자 n에서 비밀번호를 읽습니다. 파일 설명자 n에서 첫 번째 줄만 읽습니다. n에 0을 사용하면 STDIN에서 비밀번호를 읽습니다. 이 옵션은 암호가 하나만 제공되는 경우에만 사용할 수 있습니다.
--passphrase 파일 파일
file 파일에서 비밀번호를 읽습니다. file 파일에서 첫 번째 줄만 읽습니다. 이 옵션은 암호가 하나만 제공되는 경우에만 사용할 수 있습니다. 분명히, 다른 사용자가 파일을 읽을 수 있다면 파일에 저장된 비밀번호의 보안은 의심스럽습니다. 피할 수 있으면 이 옵션을 사용하지 마십시오.
--비밀번호 문자열
문자열을 비밀번호로 사용하세요. 이 옵션은 암호가 하나만 제공되는 경우에만 사용할 수 있습니다. 분명히 다중 사용자 시스템에서 이에 대한 보안은 매우 의심스럽습니다. 피할 수 있으면 이 옵션을 사용하지 마십시오.
--pinentry-mode loopback
직장에 추가
버전 2.0부터 이 비밀번호는 --batch 옵션도 제공되는 경우에만 사용됩니다. 버전 2.1부터는 --pinentry-mode도 루프백으로 설정해야 합니다.
예를 들어:
gpg --batch --yes --passphrase="pw" --pinentry-mode loopback -o out -d in