Ik verwacht dat de volgende opdracht het gpg-bestand extraheert zonder om wachtwoord te vragen:
gpg --passphrase 1234 file.gpg
Maar het vraagt om het wachtwoord. Waarom?
Dit heeft ook hetzelfde gedrag:
gpg --passphrase-file passfile.txt file.gpg
Ik gebruik Ubuntu met gnome 3, en onthoud dat het werkte in Fedora
Reacties
Antwoord
Ik zit in exact hetzelfde schuitje (het werkte op Fedora maar niet op Ubuntu). Hier is een duidelijk werk dat ik ontdekte:
echo your_password | gpg --batch --yes --passphrase-fd 0 your_file.gpg
Uitleg: 0
doorgeven veroorzaakt --passphrase-fd
om uit STDIN te lezen in plaats van uit een bestand. Als u de wachtwoordzin doorgeeft, krijgt u --passphrase-fd
om uw opgegeven wachtwoordreeks te accepteren.
Opmerkingen
- toevoegen
--batch --yes
naar het bovenstaande werkte voor mij. - Maar dan krijg ik een probleem, als ik gegevens wil versleutelen die naar gpg worden gestuurd, bijv.
echo "encrypt me" | gpg --passphrarse "mypw" -c -o test.gpg
. Hoe los ik dit op? - Nou, met de Ubuntu-versie van gpg lijkt
echo "encrypt me" | gpg --passphrase "mypassphrase" --batch --quiet --yes --no-use-agent -c -o encrypted.gpg
te werken. - I ' m krijgt
Inappropriate ioctl for device
met en zonder--batch
hier (op gpg (GnuPG) 2.1.18). - @RyanGriggs Ik denk het niet.
echo "hello" | cat
enecho "hello"| cat
leveren beide dezelfde string op.
Antwoord
Bijgewerkt 04-12-2017. (Toevoegen van –batch om wachtwoordzinprompt te voorkomen)
Mogelijk moet u de --batch
optie toevoegen:
En. gebruikt u het sleutelpaar van de ontvanger , dan moet u mogelijk ook --pinentry-mode loopback
toevoegen.
Vanaf versie 2 van GPG
, de optie --batch
is nodig om er zeker van te zijn dat er geen prompt … Ok, wat eruit ziet:
$ 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
Proberen:
$ 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
klinkt goed! Welnu:
$ 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
Hoewel er geen -d
-parameter wordt gegeven (dezelfde syntaxis als de vraag van SO), gedecodeerde gegevens van file.gpg
worden geëxtraheerd naar een nieuwe 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
Dit werkt goed!
$ cd - $ rm -fR $newdir $ unset newdir
Voor sleutelbestand ontvanger :
Eerste opschonen tempo maken
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.
En dan nu
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]
Dan zou de laatste 8char van pub-vingerafdruk kunnen worden gebruikt als sleutelalias.
gpg -k [email protected]| sed -e "/^pub/{N;s/.*\(.\{16\}\)/\1/;p;s/^.\{8\}//;q};d" 43E6B96CAFABDEDF AFABDEDF
Oké, nu!
seq -f %\"8g 990 5 1015 | gpg --batch --armor --recipient AFABDEDF --encrypt --output file.gpg
of
seq -f %\"8g 990 5 1015 | gpg --batch -aer 43E6B96CAFABDEDF -o file.gpg
Geeft:
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-----
Dan
gpg --decrypt --pinentry-mode loopback --passphrase-file password.txt --batch file.gpg
of
gpg -d --pinentry-mode loopback --passphrase-file password.txt --batch file.gpg
zal weergeven:
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
Reacties
- Je krijgt de waarschuwing niet " gpg: gpg-agent is niet beschikbaar in deze sessie " dus de wachtwoordzin is waarschijnlijk opgeslagen in de agent, misschien?
- @AsfandYarQazi Nee, de wachtwoordzin wordt op de opdrachtregel ingevoerd.
- Dit antwoord werkte voor mij. Ubuntu met gpg 1.4.16. De parameter
--passphrase
werkt voor batchbewerkingen en ' vraagt niet om een wachtwoord. - Dit kan lijken te werken omdat de irritante gpg-agent de wachtwoordzin in het cachegeheugen plaatst. Probeer het systeem volledig opnieuw op te starten en opnieuw te beginnen, of voer de verkeerde –passphrase 5678 (verkeerde passphrase) in.
- Zie lager antwoord. De sleutel is
--pinentry-mode loopback
. Het werkt!
Answer
Voor gpg versie 2.x hoeft u --batch
niet te gebruiken, alleen
--pinentry-mode loopback
werkt met --passphrase
& --passphrase-file
, en laat je nieuwe informatie invoeren, bijvoorbeeld in geval van bestandsnaamconflicten:
gpg --pinentry-mode loopback --passphrase-file=file encrypted.gpg ... File "encrypted" exists. Overwrite? (y/N)n Enter new filename: f2
in tegenstelling tot --batch
die snel zal mislukken door ...failed: File exists
te zeggen
(getest op Debian Stable / Stretch “s gpg 2.1.18. Dit gedrag van het negeren van belangrijke --passphrase
opties zou echt een bug moeten zijn, als dit nog niet het geval is)
Reacties
- Dit werkt ook goed op Ubuntu 18.04 Bionic met gpg (GnuPG) 2.2.4
- Dit werkt op MacOS na installatie gpg met homebrew
- Dit werkt voor mij
cat your-passphrase-file.txt | gpg --pinentry-mode loopback --passphrase-fd 0 --sign your-file-to-sign.txt
- Bedankt, het werkt ook voor decodering
Antwoord
Het klinkt alsof je gpg2 gebruikt. U moet ook de optie --batch
invoeren. (Als u van plan bent dit aan een script toe te voegen, wilt u dit ook toevoegen aan --no-tty
en waarschijnlijk --yes
.)
Reacties
- Het ' s 1.4. het gebruik van –batch heeft geen effect.
- Sorry dan @Nima. Ik weet niet ' wat ik je moet vertellen. Met GnuPG v1.4 zou je ' niets anders moeten doen om de wachtwoordzin door te geven met een van deze opties.
- Goede opmerking, @rsaw, hielp ik voorkom wachtwoordprompts (en iets minder elegante echo / STDIN-optie).
- –batch hielp zelfs in vensters. woo hoo.
Antwoord
voor mij, het toevoegen van “–no-use-agent” loste dit op voor “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
Antwoord
Als met gpg (GnuPG) 2.2.7 Volgens de man-pagina,
–passphrase-fd n
Lees de wachtwoordzin van bestandsdescriptor n. Alleen de eerste regel wordt gelezen uit bestandsdescriptor n. Als u 0 voor n gebruikt, wordt de wachtwoordzin uit STDIN gelezen. Dit kan alleen worden gebruikt als er maar één wachtwoordzin is opgegeven.
–passphrase-file file
Lees de passphrase uit het bestand. Alleen de eerste regel wordt gelezen uit het bestandsbestand. Dit kan alleen worden gebruikt als er slechts één wachtwoordzin is opgegeven. Het is duidelijk dat een wachtwoordzin die in een bestand is opgeslagen, twijfelachtig is als andere gebruikers dit bestand kunnen lezen. Gebruik deze optie niet als u deze kunt vermijden.
–passphrase string
Gebruik string als de wachtwoordzin. Dit kan alleen worden gebruikt als er slechts één wachtwoordzin is opgegeven. Het is duidelijk dat dit is een zeer twijfelachtige beveiliging op een systeem met meerdere gebruikers. Gebruik deze optie niet als u deze kunt vermijden.
add --pinentry-mode loopback
om te werken
Merk op dat sinds versie 2.0 deze wachtwoordzin alleen wordt gebruikt als de optie –batch ook is gegeven . Sinds versie 2.1 moet de –pinentry-mode ook worden ingesteld op loopback.
Bijvoorbeeld:
gpg --batch --yes --passphrase="pw" --pinentry-mode loopback -o out -d in
Reacties
- Zijn beide
--batch
en--pinentry-mode loopback
opties nodig om elke –passphrase … optie te laten werken? Op v.2.1.18 zegt de info-pagina hetzelfde (maar niet de man-pagina) over batch & pinentry nodig, maar werkt nog steeds met alleen –pinentry … Als beide echt nodig zijn voor v.2.2.7, dan wordt het belachelijk, ontwikkelaars introduceren expres serieuze bugs
Answer
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
Antwoord
Het werkte als magie voor mij:
echo "YOUR_PASS_PHRASE" | gpg --batch --yes --passphrase-fd 0 /home/somewhere/your_file.pgp
Reacties
- fout:
gpg: no valid OpenPGP data found. gpg: processing message failed: eof
. Enig idee?
Antwoord
heb je geprobeerd te doen:
gpg --batch --passphrase-fd 0 --decrypt-files *.gpg gpg --passphrase-fd 0 1234 file.gpg
Bron: Hier
Antwoord
Zoals vermeld in man gpg kan de volgende optie worden gebruikt.
–pinentry-mode mode Zet de pinentry-mode op mode. Toegestane waarden voor mode zijn:
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.
Dus het standaardgedrag van gpg is om de gebruiker om een wachtwoordzin te vragen, als deze user agent-modus wordt gewijzigd in “–pinentry-mode loopback “Het werkt prima. complete opdracht
gpg --pinentry-mode loopback --passphrase <passphrase> -d <file to decrypt>
Antwoord
Ik denk dat dit een vrij veilige methode is om te slagen het wachtwoord voor de opdrachtregel is dit:
gpg --passphrase-file <(echo password) --batch --output outfile -c file
Wat dit zal doen is het “echo” -commando spawnen en een bestandsdescriptor als padnaam doorgeven aan gpg (bijv. / dev / fd / 63). gpg leest dan de sleutel vanaf daar. In de tussentijd zou het echo-commando parallel moeten lopen en onmiddellijk moeten eindigen, waarbij de sleutel in de buffer van de fd blijft.
Voordelen zijn:
- Het gpg commando zal het wachtwoord niet op de commandoregel hebben.
- De echo zal van korte duur zijn. In feite zou het bijna onmiddellijk moeten zijn.
- Het wachtwoord zal nooit op de schijf staan, er zal geen bestand zijn om te verwijderen en als het commando wordt onderbroken, zullen er geen overblijfselen zijn
Answer
Je zult me niet geloven als ik je vertel dat gpg op ubuntu je wachtwoord probeert te vragen als $ DISPLAY is ingesteld en neemt het over van commandline –password als je het uitschakelt. Dit werkt zoals verwacht:
DISPLAY= gpg --symmetric --passphrase pass --batch
Gewoon weer een voorbeeld van over-engineering denk ik.
Antwoord
Hier “sa link naar een stackoverflow antwoord dat misschien van verdere hulp is; ik heb een project dat bulksgewijs ontsleutelen / versleutelen uitvoert, en omdat GnuPG erg streng is over wachtzinnen, leerde het op de harde manier dat --passphrase
slechts in zeldzame gevallen werkt. de --passphrase-fd
optie om betrouwbaarder te zijn.
Dit script maakt juist gebruik van de --passphrase -fd
optie, en is publiekelijk getest via Travis-CI waar je er logboeken van kunt vinden in actie.
Nu ga ik niet zomaar links naar een antwoord posten zonder hier een voorbeeldcode op te geven, dus hier is een bijgewerkt “stand alone” -script waarmee je kunt spelen:
#!/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}>&-
Hoewel het bovenstaande niet zo luxe is als de li nked protect op GitHub het zou zelfs functioneler moeten zijn dan het antwoord dat aan het begin van dit bericht is gelinkt.
Veel plezier met hacken.
Antwoord
Een eenvoudige methode die ik vond werken op een linux-machine is: 1) importeer sleutel naar gpg: => shell> gpg —import private_key.key
2) decoderen met de naam van het outfile: => shell> gpg —output -d
2.1) Door het bovenstaande commando te geven, wordt je gevraagd een parafrase in te voeren. Voer de parafrase in en het zal het gpg-bestand ontsleutelen.
Answer
gpg2 -se --passphrase yourpassword --batch --yes -r [email protected] filename
Opmerkingen
- het zou leuk zijn als je zou kunnen uitleggen waarom dit het probleem zou moeten oplossen
- Hoewel dit codefragment de vraag kan oplossen, inclusief een uitleg helpt echt om de kwaliteit van uw bericht te verbeteren. Onthoud dat u de vraag voor lezers in de toekomst beantwoordt, niet alleen de persoon die het nu stelt! bewerk uw antwoord om uitleg toe te voegen, en geef een indicatie van welke beperkingen en aannames van toepassing zijn.
Antwoord
Zet aan het einde van ~/.gnupg/gpg.conf
:
use-agent pinentry-mode loopback
Plaats aan het einde van (misschien nieuw) bestand ~/.gnupg/gpg-agent.conf
:
allow-loopback-pinentry
En voer dan deze opdracht uit :
echo RELOADAGENT | gpg-connect-agent
Nu kunt u dit uitvoeren zonder wachtwoord te vragen:
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"
Waar $ 1 de tekst is die moet worden versleuteld, $ 2 de gebruikers-ID en $ 3 het wachtwoord.
Opmerking: ik kan me niet herinneren waarom het werkt, maar het werkt. Als je de details kent, bewerk en voeg hier toe.
Antwoord
voor Ubuntu 18.04 werkte dit voor mij-
versleutelen:
pass="123" gpg -c --batch --passphrase "$pass" some-file.tgz
ontsleutelen:
gpg some-file.tgz.gpg
Antwoord
Zelfs ik had hetzelfde probleem, maar geen o f de hier genoemde commandos niet werkten en ik controleerde ook verschillende antwoorden met verschillende commandos, maar niets werkte.
Ik was op Ubuntu 20.04.1 LTS
Na veel head-bashen en op de een of andere manier experimenteren
gpg --pinentry-mode loopback --passphrase-file=passphrase.txt --decrypt-files my-encrypted-gpg-file.gpg
passphrase.txt
bestand bevat uw passphrase.txt, obvisuosly.
Hoop dat het zal helpen.
gpg
het juiste commando uitvoert, geen alias of wrapper? Probeer/usr/bin/gpg --passphrase 1234 file.gpg
,type gpg
,gpg --version
enset | grep '^.\{0,9\}PG'
gpg --list-packets --batch myFile.gpg
om een wachtwoordzin vraagt, terwijl ' t in GPG 1.x. Dat was mijn probleem (in een programma dat ik ' m schrijf), terwijl ik dacht dat ik jouw probleem had (de –list-packets ding dat eerst werd uitgevoerd, voordat ik probeerde te ontsleutelen, en ik heb het ' niet opgemerkt). Dus ik heb een nieuwe manier bedacht om te bepalen of bestanden waren versleuteld.gpg --version
2.x hebt (zoals in Ubuntu 18.04), ga dan naar Xen2050 ' s antwoord: unix.stackexchange.com/a/415064/237055