다음 명령이 암호를 묻지 않고 gpg 파일을 추출 할 것으로 예상합니다.

 gpg --passphrase 1234 file.gpg 

하지만 암호를 묻습니다. 그 이유는 무엇입니까?

또한 동일한 동작이 있습니다.

 gpg --passphrase-file passfile.txt file.gpg 

그놈 3과 함께 Ubuntu를 사용하고 있으며 Fedora에서 작동하고 있음을 기억합니다.

댓글

  • gpg가 별칭이나 래퍼가 아닌 올바른 명령을 실행하고 있습니까? /usr/bin/gpg --passphrase 1234 file.gpg, type gpg, gpg --versionset | grep '^.\{0,9\}PG'
  • 기록을 위해 GPG의 이전 버전을 사용하는 경우 작동합니다 (Ubuntu 등에서는 ' gnupg1 패키지입니다. 그러나 꼭 필요한 경우가 아니면 사용하지 않는 것이 좋습니다.
  • 또한 GPG 2.x에서는 gpg --list-packets --batch myFile.gpg가 암호를 입력하지만 그렇지 않은 경우 ' t. 그게 내 문제였습니다 (' 작성중인 프로그램에서). –list-packets 일이 먼저 실행되고 해독을 시도했지만 ' 알지 못했습니다). 그래서 파일이 암호화되었는지 확인하는 새로운 방법을 만들었습니다.
  • gpg --version 2.x (Ubuntu 18.04에서와 같이)가있는 경우 Xen2050 '의 답변으로 이동 : unix.stackexchange.com/a/415064/237055

답변

저는 똑같은 배를 타고 있습니다 (Fedora에서는 작동하지만 Ubuntu에서는 작동하지 않음). 내가 발견 한 해결 방법은 다음과 같습니다.

echo your_password | gpg --batch --yes --passphrase-fd 0 your_file.gpg 

설명 : 0를 전달하면 는 파일이 아닌 STDIN에서 읽습니다. 따라서 암호를 파이핑하면 지정된 암호 문자열을 수락하기 위해 --passphrase-fd가 표시됩니다.

댓글

  • 추가 위의 --batch --yes가 저에게 효과적이었습니다.
  • 하지만 gpg로 파이프되는 데이터를 암호화하려는 경우 문제가 발생합니다. echo "encrypt me" | gpg --passphrarse "mypw" -c -o test.gpg. 이 문제를 어떻게 해결합니까?
  • Gpg의 Ubuntu 버전에서는 echo "encrypt me" | gpg --passphrase "mypassphrase" --batch --quiet --yes --no-use-agent -c -o encrypted.gpg가 작동하는 것 같습니다.
  • I ' m에서 Inappropriate ioctl for device--batch 여기에서 가져옵니다 (GPG (GnuPG) 2.1.18).
  • @RyanGriggs 그렇게 생각하지 않습니다. echo "hello" | catecho "hello"| cat 모두 동일한 문자열을 생성합니다.

답변

2017 년 12 월 4 일에 업그레이드되었습니다. (암호 프롬프트를 방지하기 위해 –batch 추가)

--batch 옵션을 추가해야 할 수도 있습니다.

그리고. 수신자 키 쌍 을 사용하고 있다면 --pinentry-mode loopback도 추가해야 할 수 있습니다.

, 프롬프트가 표시되지 않도록하려면 --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. 

그런 다음

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] 

그런 다음 발행인 지문의 마지막 8 문자를 키 별칭으로 사용할 수 있습니다.

gpg -k [email protected]| sed -e "/^pub/{N;s/.*\(.\{16\}\)/\1/;p;s/^.\{8\}//;q};d" 43E6B96CAFABDEDF AFABDEDF 

알겠습니다.

seq -f %\"8g 990 5 1015 | gpg --batch --armor --recipient AFABDEDF --encrypt --output file.gpg 

또는

seq -f %\"8g 990 5 1015 | gpg --batch -aer 43E6B96CAFABDEDF -o 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----- 

그런 다음

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 

댓글

  • 경고가 표시되지 않습니다. " gpg : gpg-agent를 사용할 수 없습니다. 이 세션에서 " 에이전트에 암호가 저장되어있을 수 있습니까?
  • @AsfandYarQazi 아니요, 암호는 명령 줄에 입력됩니다.
  • 이 답변은 저에게 효과적이었습니다. GPG 1.4.16이있는 Ubuntu --passphrase 매개 변수는 일괄 작업에 작동하며 ' 비밀번호를 묻는 메시지를 표시하지 않습니다.
  • 이 작업은 성가신 gpg-agent가 암호를 캐싱하고 있기 때문에 작동하는 것처럼 보입니다. 시스템을 완전히 재부팅하고 새로 시작하거나 잘못된 –passphrase 5678 (잘못된 암호)을 입력 해보십시오.
  • 낮은 답변보기. 키는 --pinentry-mode loopback입니다. 작동합니다!

답변

GPG 버전 2의 경우x는 --batch를 사용할 필요가 없으며

--pinentry-mode loopback 

& --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 “s gpg 2.1.18에서 테스트되었습니다. 중요한 --passphrase 옵션을 무시하는 동작은 실제로 버그가 아닙니다. 아직 버그가 아닙니다.)

댓글

  • Gpg (GnuPG) 2.2.4를 사용하는 Ubuntu 18.04 Bionic에서도 잘 작동합니다.
  • 설치 후 MacOS에서 작동합니다. gpg with homebrew
  • 이것은 저에게 효과적입니다. cat your-passphrase-file.txt | gpg --pinentry-mode loopback --passphrase-fd 0 --sign your-file-to-sign.txt
  • 감사합니다. 복호화에도 적용됩니다.

답변

gpg2를 사용하는 것 같습니다. --batch 옵션도 넣어야합니다. (이것을 스크립트에 추가하려는 경우 “--no-tty 및 아마도 --yes를 추가하는 것이 좋습니다.)

댓글

  • 그것 ' 1.4. –batch를 사용해도 효과가 없습니다.
  • 죄송합니다. @Nima. 나는 ' 당신에게 무엇을 말해야할지 모르겠습니다. GnuPG v1.4를 사용하면 ' 이러한 옵션 중 하나를 사용하여 암호를 전달하기 위해 다른 작업을 수행 할 필요가 없습니다.
  • 좋은 메모, @rsaw가 도움이되었습니다. 암호 프롬프트를 방지합니다 (그리고 약간 덜 우아한 에코 / STDIN 옵션).
  • -배치는 창에서도 도움이되었습니다. woo hoo.

Answer

나에게 “–no-use-agent”를 추가하면 “gpg (GnuPG) 1.4.16”:

date > foo echo pass > passphrase # w/o --no-use-agent > rm -f foo.gpg; gpg --cipher-algo aes256 --output foo.gpg --passphrase-file ./passphrase --batch --yes --symmetric foo 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 `foo" failed: invalid passphrase > rm -f foo.gpg; gpg --cipher-algo aes256 --output foo.gpg --passphrase-file ./passphrase --batch --yes --no-use-agent --symmetric foo > ls -al total 20 drwxr-xr-x 2 root root 4096 Aug 22 13:59 . drwx------ 18 root root 4096 Aug 22 13:58 .. -rw-r--r-- 1 root root 30 Aug 22 13:58 foo -rw-r--r-- 1 root root 103 Aug 22 13:59 foo.gpg -rw-r--r-- 1 root root 5 Aug 22 13:58 passphrase 

답변

gpg (GnuPG) 사용 2.2.7 man 페이지에 따르면

-passphrase-fd n

파일 설명자 n. 파일 설명자 n에서 첫 번째 줄만 읽습니다. n에 0을 사용하면 STDIN에서 암호를 읽습니다. 암호를 하나만 제공 한 경우에만 사용할 수 있습니다.

-passphrase-file file

파일 파일에서 암호를 읽습니다. 파일 파일에서 첫 번째 줄만 읽습니다. 하나의 암호 만 제공된 경우에만 사용할 수 있습니다. 분명히 파일에 저장된 암호는 다른 사용자가이 파일을 읽을 수있는 경우 보안이 의심스러운 것입니다. 피할 수 있으면이 옵션을 사용하지 마십시오.

-passphrase string

문자열을 암호로 사용하십시오. 이것은 하나의 암호 만 제공되는 경우에만 사용할 수 있습니다. 당연히, 이것은 다중 사용자 시스템에서 매우 의심스러운 보안입니다. 피할 수 있으면이 옵션을 사용하지 마십시오.

add --pinentry-mode loopback 작동하려면

버전 2.0부터이 암호는 –batch 옵션도 제공된 경우에만 사용됩니다. . 버전 2.1부터 –pinentry-mode도 루프백으로 설정해야합니다.

예 :

gpg --batch --yes --passphrase="pw" --pinentry-mode loopback -o out -d in 

댓글

  • --batch--pinentry-mode loopback 옵션이 필요합니까? v.2.1.18에서 정보 페이지는 필요한 배치 & pinentry에 대해 동일한 내용 (맨 페이지가 아님)을 말하지만 여전히 –pinentry … v.2.2.7에 정말 필요하지만 상황이 우스꽝스러워지고 개발자가 의도적으로 심각한 버그를 도입하고 있습니다.

답변

read -sp "Enter passphrase: " pass echo "${pass}" | gpg --batch --no-tty --yes --passphrase-fd 0 --symmetric -o /path/to/saved/file.jpg.gpg /path/to/file.jpg echo "${pass}" | gpg --batch --no-tty --yes --passphrase-fd 0 --decrypt -o /path/to/decrypted/file.jpg /path/to/encrypted/file.jpg.gpg 

답변

마법처럼 작동했습니다.

echo "YOUR_PASS_PHRASE" | gpg --batch --yes --passphrase-fd 0 /home/somewhere/your_file.pgp 

댓글

  • 오류 : gpg: no valid OpenPGP data found. gpg: processing message failed: eof. 아이디어가 있으십니까?

답변

해본 적이 있습니까?

gpg --batch --passphrase-fd 0 --decrypt-files *.gpg gpg --passphrase-fd 0 1234 file.gpg 

출처 : 여기

답변

man gpg에서 언급했듯이 다음 옵션을 사용할 수 있습니다.

-pinentry-mode mode pinentry 모드를 mode로 설정합니다. 모드에 허용되는 값은 다음과 같습니다.

 default Use the default of the agent, which is ask. ask Force the use of the Pinentry. cancel Emulate use of Pinentry"s cancel button. error Return a Pinentry error (``No Pinentry""). loopback Redirect Pinentry queries to the caller. Note that in contrast to Pinentry the user is not prompted again if he enters a bad password. 

따라서 gpg의 기본 동작은이 사용자 에이전트 모드를 “–pinentry-mode로 변경하는 경우 사용자에게 암호를 묻는 메시지를 표시하는 것입니다. loopback “완벽하게 잘 작동합니다. 완전한 명령

gpg --pinentry-mode loopback --passphrase <passphrase> -d <file to decrypt> 

답변

나는 통과하는 매우 안전한 방법이라고 생각합니다 명령 줄의 암호는 다음과 같습니다.

gpg --passphrase-file <(echo password) --batch --output outfile -c file 

이 작업은 “echo”명령을 생성하고 파일 설명자를 경로 이름으로 전달하는 것입니다. gpg (예 : / dev / fd / 63). gpg는 거기에서 키를 읽습니다. 그 동안 echo 명령은 병렬로 실행되어야하며 즉시 완료되어야하며 키는 fd의 버퍼에 남아 있어야합니다.

장점은 다음과 같습니다.

  • gpg 명령은 명령 줄에 암호가 없습니다.
  • 에코는 수명이 짧습니다. 사실, 거의 즉각적이어야합니다.
  • 암호는 디스크에 절대 상주하지 않으며, “삭제할 파일도 없으며, 명령이 중단되면 남은 항목이 없습니다.

답변

Ubuntu에서 gpg가 $ DISPLAY가 설정되어있는 경우 비밀번호를 묻는다고 말하면 나를 믿지 못할 것입니다. 설정을 해제하면 명령 줄 –password에서 가져옵니다. 예상대로 작동합니다.

DISPLAY= gpg --symmetric --passphrase pass --batch 

내가 추측하는 오버 엔지니어링의 또 다른 예입니다.

답변

여기에 추가 도움이 될 수있는 stackoverflow 답변에 대한 링크 가 있습니다. 대량 복호화 / 암호화를 수행하는 프로젝트이며 GnuPG 가 암호에 대해 매우 엄격하기 때문에 --passphrase가 드문 경우에만 작동한다는 어려운 방법을 배웠습니다. 대신 고려해보십시오. --passphrase-fd 옵션이 더 안정적입니다.

스크립트 올바른 --passphrase -fd 옵션을 사용하며, 작동중인 로그를 찾을 수있는 Travis-CI 를 통해 공개적으로 테스트되었습니다.

이제 여기에 몇 가지 예제 코드를 제공하지 않고 답변에 대한 링크를 게시하지 않을 것이므로 여기에 업데이트 된 “독립 실행 형”스크립트를 사용할 수 있습니다.

#!/usr/bin/env bash # Set some variables for easy modding Var_fd="9" Var_pass="/path/to/passphrase.file" Var_gpg_opts="--passphrase-fd ${Var_fd} --decrypt" Var_output_location="out.txt" Arr_string=( "$@" ) # Open file descriptor and shove the passphrase file into it if [ -f "${Var_pass}" ]; then exec ${Var_fd}<"${Var_pass}" else exec ${Var_fd}<(echo "${Var_pass}") fi # Pipe input array though gpg and append to output file cat <<<"${Arr_string[*]}" | $(which gpg) ${Var_gpg_opts} >> ${Var_output_location} # Do not forget to close the file descriptor exec ${Var_fd}>&- 

위의 내용은 li만큼 화려하지는 않지만 nked protect at GitHub는이 게시물의 시작 부분에 링크 된 답변보다 훨씬 더 기능적이어야합니다.

해피 해킹

답변

리눅스 컴퓨터에서 작업하는 간단한 방법은 다음과 같습니다. 1) gpg로 키 가져 오기 : => shell> gpg —import private_key.key

2) outfile 이름을 제공하는 decrypt : => shell> gpg —output -d

2.1) 위의 명령을 내리면 의역을 입력하라는 메시지가 표시됩니다. 의역을 입력하면 gpg 파일의 암호가 해독됩니다.

답변

gpg2 -se --passphrase yourpassword --batch --yes -r [email protected] filename 

의견

  • 이 방법으로 문제를 해결해야하는 이유를 설명해 주시면 좋습니다.
  • 이 코드 스 니펫은 설명을 포함하여 질문을 해결할 수 있지만 게시물의 품질을 개선하는 데 정말 도움이됩니다 . 지금 질문하는 사람뿐만 아니라 앞으로 독자를 위해 질문에 답하고 있다는 것을 기억하십시오! 설명을 추가하기 위해 답변을 수정 하고 적용되는 제한 및 가정에 대한 표시를 제공하세요.

답변

~/.gnupg/gpg.conf 끝에 추가 :

use-agent pinentry-mode loopback 

(아마 새로운) 파일 ~/.gnupg/gpg-agent.conf :

allow-loopback-pinentry 

다음 명령을 실행합니다. :

echo RELOADAGENT | gpg-connect-agent 

이제 비밀번호를 묻지 않고 실행할 수 있습니다.

echo "$1" | gpg2 --trust-model always --clearsign --batch --no-tty --quiet --no-verbose --yes -u $2 --digest-algo SHA512 --s2k-digest-algo SHA512 --passphrase "$3" 

$ 1은 암호화 할 텍스트, $ 2는 사용자 ID, $ 3는 비밀번호입니다.

참고 : 작동 이유를 기억할 수 없지만 작동합니다. 자세한 내용을 알고 있다면, 여기에 편집하고 삽입하십시오.

Answer

Ubuntu 18.04의 경우 이것은 저에게 효과적이었습니다-

암호화 :

pass="123" gpg -c --batch --passphrase "$pass" some-file.tgz 

복호화 :

gpg some-file.tgz.gpg 

답변

나도 같은 문제에 직면했습니다. f 여기에 언급 된 명령이 작동하지 않고 다른 명령으로 다른 답변을 확인했지만 작동하지 않았습니다.

Ubuntu 20.04.1 LTS

많은 수고를 치고 어떻게 든 실험 한 끝에

gpg --pinentry-mode loopback --passphrase-file=passphrase.txt --decrypt-files my-encrypted-gpg-file.gpg

passphrase.txt 파일 passphrase.txt가 명확하게 포함되어 있습니다.

도움이 되길 바랍니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다