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
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
eecho "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.
gpg
executou o comando certo, não um alias nem um wrapper? Experimente/usr/bin/gpg --passphrase 1234 file.gpg
,type gpg
,gpg --version
eset | grep '^.\{0,9\}PG'
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.gpg --version
2.x (como no Ubuntu 18.04), vá para Xen2050 ' a resposta: unix.stackexchange.com/a/415064/237055