Espero que o seguinte comando extraia o arquivo gpg sem pedir a senha:

 gpg --passphrase 1234 file.gpg 

Mas ele pede a senha. Por quê?

Isso também tem o mesmo comportamento:

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

Eu uso o Ubuntu com o gnome 3 e lembro que estava funcionando no Fedora

Comentários

  • Você tem certeza que gpg executou o comando certo, não um alias nem um wrapper? Experimente /usr/bin/gpg --passphrase 1234 file.gpg, type gpg, gpg --version e set | grep '^.\{0,9\}PG'
  • Apenas para registro, se você usar a versão antiga do GPG, ela deve funcionar (no Ubuntu e tal, é ' é o pacote gnupg1. No entanto, eles desencorajam seu uso, a menos que seja necessário.
  • Observe também que no GPG 2.x gpg --list-packets --batch myFile.gpg solicita uma senha longa, enquanto não ' t no GPG 1.x. Esse era o meu problema (em um programa que eu ' estou escrevendo), enquanto pensei que tinha o seu problema (o A coisa –list-packets foi executada primeiro, antes de tentar descriptografar, e eu não ' percebi). Portanto, criei uma nova maneira de determinar se os arquivos foram criptografados.
  • Se você tiver gpg --version 2.x (como no Ubuntu 18.04), vá para Xen2050 ' a resposta: unix.stackexchange.com/a/415064/237055

Resposta

Estou exatamente no mesmo barco (funcionou no Fedora, mas não no Ubuntu). Aqui está uma aparente solução alternativa que descobri:

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

Explicação: Aprovação 0 causa --passphrase-fd para ler de STDIN em vez de um arquivo. Portanto, canalizar a frase secreta fará com que --passphrase-fd aceite a string de senha especificada.

Comentários

  • adição --batch --yes ao que foi descrito acima funcionou para mim.
  • Mas então eu tenho um problema, se eu quero criptografar dados que são canalizados para gpg, por exemplo echo "encrypt me" | gpg --passphrarse "mypw" -c -o test.gpg. Como faço para resolver isso?
  • Bem, com a versão Ubuntu do gpg, echo "encrypt me" | gpg --passphrase "mypassphrase" --batch --quiet --yes --no-use-agent -c -o encrypted.gpg parece funcionar.
  • I ' m obtendo Inappropriate ioctl for device com e sem --batch aqui (no gpg (GnuPG) 2.1.18).
  • @RyanGriggs Acho que não. echo "hello" | cat e echo "hello"| cat produzem a mesma string.

Resposta

Atualizado em 04-12-2017. (Adicionando –batch para evitar o prompt da frase secreta)

Você pode ter que adicionar a opção --batch:

E. se usar o par de chaves do destinatário , talvez seja necessário adicionar --pinentry-mode loopback também.

Da versão 2 de GPG, a opção --batch é necessária para garantir que nenhum prompt … Ok, observando que:

$ 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 

Tentando:

$ 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 

parece bom! Bem, agora:

$ 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 

Embora nenhum parâmetro -d seja fornecido (mesma sintaxe da pergunta do SO), Os dados descriptografados de file.gpg serão extraídos para um novo 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 

Isso funciona bem!

$ cd - $ rm -fR $newdir $ unset newdir 

Para arquivo-chave do destinatário :

Criação do primeiro tempo limpo

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. 

Hmm.

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. 

Agora, agora

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] 

Então, os últimos 8 caracteres da impressão digital do pub podem ser usados como alias-chave.

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

Ok, agora!

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

ou

seq -f %\"8g 990 5 1015 | gpg --batch -aer 43E6B96CAFABDEDF -o file.gpg 

Fornecerá:

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----- 

Em seguida,

gpg --decrypt --pinentry-mode loopback --passphrase-file password.txt --batch file.gpg 

ou

gpg -d --pinentry-mode loopback --passphrase-file password.txt --batch file.gpg 

renderizará:

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 

Comentários

  • Você não está recebendo o aviso " gpg: o gpg-agent não está disponível nesta sessão " então você provavelmente tem a senha armazenada no agente, talvez?
  • @AsfandYarQazi Não, a senha é inserida na linha de comando.
  • Essa resposta funcionou para mim. Ubuntu com gpg 1.4.16. O parâmetro --passphrase funciona para operações em lote e não ' t solicita uma senha.
  • Isso pode parecem funcionar porque o irritante agente gpg está armazenando a frase-senha em cache. Tente reiniciar o sistema completamente e começar do zero, ou digitando –passphrase 5678 errada (passphrase errada).
  • Veja a resposta inferior. A chave é --pinentry-mode loopback. Funciona!

Resposta

Para gpg versão 2.x você não precisa usar --batch, apenas

--pinentry-mode loopback 

funciona com --passphrase & --passphrase-file, e permitirá que você insira novas informações, em caso de conflitos de nome de arquivo, por exemplo:

gpg --pinentry-mode loopback --passphrase-file=file encrypted.gpg ... File "encrypted" exists. Overwrite? (y/N)n Enter new filename: f2 

ao contrário de --batch, que falhará rapidamente, dizendo ...failed: File exists

(testado no Debian Stable / Stretch “s gpg 2.1.18. Este comportamento de ignorar opções --passphrase importantes realmente deveria ser um bug, se ainda não)

Comentários

  • Isso também funciona bem no Ubuntu 18.04 Bionic com gpg (GnuPG) 2.2.4
  • Isso funciona no MacOS após a instalação gpg com homebrew
  • Isso funciona para mim cat your-passphrase-file.txt | gpg --pinentry-mode loopback --passphrase-fd 0 --sign your-file-to-sign.txt
  • Obrigado, também funciona para descriptografia

Resposta

Parece que você está usando gpg2. Você precisa incluir a opção --batch também. (Se você está planejando adicionar isso a um script, também desejará adicionar --no-tty e provavelmente --yes.)

Comentários

  • It ' s 1.4. usar –batch não tem efeito.
  • Desculpe, @Nima. Eu não ' não sei o que dizer a você. Com o GnuPG v1.4, você não ' precisa fazer mais nada para passar a senha longa com qualquer uma dessas opções.
  • Boa nota, @rsaw, ajudou me evitar solicitações de senha (e opção echo / STDIN um pouco menos elegante).
  • –batch ajudava mesmo no Windows. woo hoo.

Resposta

para mim, adicionar “–no-use-agent” resolveu isso para “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 

Resposta

Se usando gpg (GnuPG) 2.2.7 De acordo com a página de manual,

–passphrase-fd n

Leia a senha de descritor de arquivo n. Apenas a primeira linha será lida do descritor de arquivo n. Se você usar 0 para n, a frase secreta será lida do STDIN. Isto só pode ser usado se apenas uma frase-senha for fornecida.

–passphrase-file file

Leia a frase-senha do arquivo file. Apenas a primeira linha será lida do arquivo de arquivo. Isso só pode ser usado se apenas uma frase-senha for fornecida. Obviamente, uma frase secreta armazenada em um arquivo é de segurança questionável se outros usuários puderem ler este arquivo. Não use esta opção se puder evitá-la.

–cadeia da frase-senha

Use a string como a frase-senha. Isso só pode ser usado se apenas uma frase-senha for fornecida. Obviamente, isto é de segurança muito questionável em um sistema multiusuário. Não use esta opção se puder evitá-la.

add --pinentry-mode loopback para funcionar

Observe que, desde a versão 2.0, esta senha só é usada se a opção –batch também tiver sido fornecida . Desde a versão 2.1, o –pinentry-mode também precisa ser definido para loopback.

Por exemplo:

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

Comentários

  • São --batch e --pinentry-mode loopback opções necessárias para qualquer opção –passphrase … funcionar? Na v.2.1.18, a página de informações diz a mesma coisa (mas não a página de manual) sobre batch & pinentry necessário, mas ainda funciona apenas com –pinentry … Se ambos realmente são necessários para v.2.2.7, então as coisas estão ficando ridículas, os desenvolvedores estão introduzindo bugs sérios de propósito

Resposta

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 

Resposta

Funcionou como mágica para mim:

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

Comentários

  • erro: gpg: no valid OpenPGP data found. gpg: processing message failed: eof. Alguma ideia?

Resposta

você já tentou fazer:

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

Fonte: Aqui

Resposta

Conforme mencionado em man gpg, a seguinte opção pode ser usada

–pinentry-mode mode Defina o modo pinentry para o modo. Os valores permitidos para o modo são:

 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. 

Portanto, o comportamento padrão do gpg é solicitar a senha do usuário, se alterar o modo do agente do usuário para “–pinentry-mode loopback “Funciona perfeitamente bem. comando completo

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

Resposta

Acho que é um método bastante seguro de passar a senha para a linha de comando é esta:

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

O que isso fará é gerar o comando “echo” e passar um descritor de arquivo como um nome de caminho para gpg (por exemplo, / dev / fd / 63). gpg irá então ler a chave a partir daí. Enquanto isso, o comando echo deve ser executado em paralelo e deve terminar instantaneamente, deixando a chave no buffer do fd.

Os benefícios são:

  • O comando gpg não terá a senha em sua linha de comando
  • O eco terá vida curta. Na verdade, deve ser quase instantâneo
  • A senha nunca residirá no disco, não haverá um arquivo a ser excluído e se o comando for interrompido não haverá sobras

Resposta

Você não vai acreditar em mim quando eu disser que no ubuntu gpg tenta perguntar sua senha se $ DISPLAY estiver definido e pega da linha de comando –password se você não configurá-lo. Isso funciona conforme o esperado:

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

Apenas outro exemplo de excesso de engenharia, eu acho.

Resposta

Aqui “sa link para um stackoverflow responder que talvez seja de ajuda adicional; Eu tenho um projeto que faz descriptografia / criptografia em massa, e devido ao GnuPG ser muito rígido sobre senhas, aprendi da maneira mais difícil que --passphrase só funciona em raras ocasiões. Em vez disso, considere a opção --passphrase-fd para ser mais confiável.

Este script torna o adequado uso da opção --passphrase -fd, e foi testado publicamente por meio do Travis-CI , onde você pode encontrar logs dele em ação.

Agora, não irei apenas postar links para uma resposta sem fornecer algum código de exemplo aqui, então aqui está um script “autônomo” atualizado com o qual você pode brincar:

#!/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}>&- 

Embora o acima não seja tão sofisticado quanto o li protegido no GitHub, ele deve ser ainda mais funcional do que a resposta vinculada no início desta postagem.

Feliz hacking.

Resposta

Um método simples que descobri para trabalhar em uma máquina Linux é: 1) importar chave para gpg: => shell> gpg —import private_key.key

2) descriptografar fornecendo o nome do arquivo de saída: => shell> gpg —output -d

2.1) Fornecer o comando acima solicitará que você insira uma paráfrase. Digite a paráfrase e ela descriptografará o arquivo gpg.

Resposta

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

Comentários

  • seria bom se você pudesse explicar por que isso deve resolver o problema
  • Embora este snippet de código possa resolver a questão, incluindo uma explicação realmente ajuda a melhorar a qualidade de sua postagem. Lembre-se de que você está respondendo às perguntas para os leitores no futuro, não apenas para a pessoa que está perguntando agora! edite sua resposta para adicionar explicação e dê uma indicação de quais limitações e suposições se aplicam.

Resposta

Coloque no final de ~/.gnupg/gpg.conf:

use-agent pinentry-mode loopback 

Coloque no final do (talvez novo) arquivo ~/.gnupg/gpg-agent.conf:

allow-loopback-pinentry 

E então execute este comando :

echo RELOADAGENT | gpg-connect-agent 

Agora você pode executar isso sem solicitar a senha:

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" 

Onde $ 1 é o texto a ser criptografado, $ 2 é o ID do usuário e $ 3 a senha.

Nota: Não me lembro por que funciona, mas funciona. Se você sabe os detalhes, edite e insira aqui.

Resposta

para Ubuntu 18.04 isso funcionou para mim-

criptografar:

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

descriptografar:

gpg some-file.tgz.gpg 

Resposta

Até eu estava enfrentando o mesmo problema. Mas nenhum o Se os comandos mencionados aqui não funcionaram e também verifiquei respostas diferentes com comandos diferentes, mas nada funcionou.

Eu estava em Ubuntu 20.04.1 LTS

Depois de muita batida na cabeça e experimentar de alguma forma esse arquivo

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

passphrase.txt arquivo contém sua frase-senha.txt, obviamente.

Espero que ajude.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *