nach dem Passwort. Ich erwarte, dass der folgende Befehl die gpg-Datei extrahiert, ohne nach dem Passwort zu fragen:

 gpg --passphrase 1234 file.gpg 

Es wird jedoch nach dem Kennwort gefragt. Warum?

Dies hat auch das gleiche Verhalten:

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

Ich verwende Ubuntu mit Gnome 3 und erinnere mich, dass es in Fedora funktioniert hat

Kommentare

  • Sind Sie sicher, dass gpg den richtigen Befehl ausführt, weder einen Alias noch einen Wrapper? Versuchen Sie /usr/bin/gpg --passphrase 1234 file.gpg, type gpg, gpg --version und set | grep '^.\{0,9\}PG'
  • Nur für den Datensatz, wenn Sie die alte Version von GPG verwenden, sollte es funktionieren (unter Ubuntu und so ist es ' das gnupg1-Paket. Sie raten jedoch davon ab, es zu verwenden, es sei denn, Sie müssen.
  • Beachten Sie auch, dass in GPG 2.x gpg --list-packets --batch myFile.gpg zur Eingabe einer Passphrase auffordert, während dies nicht ' t in GPG 1.x. Das war mein Problem (in einem Programm, das ich ' schreibe), während ich dachte, ich hätte Ihr Problem (das –list-packages wird zuerst ausgeführt, bevor versucht wird zu entschlüsseln, und ich habe ' nicht bemerkt). Also habe ich einen neuen Weg gefunden, um festzustellen, ob Dateien verschlüsselt wurden.
  • Wenn Sie gpg --version 2.x (wie in Ubuntu 18.04) haben, springen Sie zu Xen2050 ' s Antwort: unix.stackexchange.com/a/415064/237055

Antwort

Ich bin in genau demselben Boot (es hat auf Fedora funktioniert, aber nicht auf Ubuntu). Hier ist eine offensichtliche Problemumgehung, die ich entdeckt habe:

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

Erläuterung: Das Übergeben von 0 verursacht --passphrase-fd zum Lesen aus STDIN und nicht aus einer Datei. Wenn Sie also die Passphrase weiterleiten, wird --passphrase-fd Ihre angegebene Kennwortzeichenfolge akzeptieren.

Kommentare

  • Hinzufügen --batch --yes hat bei mir funktioniert.
  • Aber dann bekomme ich ein Problem, wenn ich Daten verschlüsseln möchte, die in gpg geleitet werden, z echo "encrypt me" | gpg --passphrarse "mypw" -c -o test.gpg. Wie löse ich das?
  • Nun, mit der Ubuntu-Version von gpg scheint echo "encrypt me" | gpg --passphrase "mypassphrase" --batch --quiet --yes --no-use-agent -c -o encrypted.gpg zu funktionieren.
  • I ' Ich erhalte Inappropriate ioctl for device mit und ohne --batch hier (auf gpg (GnuPG) 2.1.18).
  • @RyanGriggs Das glaube ich nicht. echo "hello" | cat und echo "hello"| cat ergeben beide dieselbe Zeichenfolge.

Antwort

Aktualisiert am 04.12.2017. (Hinzufügen von –batch, um die Eingabe von Passphrasen zu verhindern)

Möglicherweise müssen Sie die Option --batch hinzufügen:

Und. Wenn Sie Empfängerschlüsselpaar verwenden, müssen Sie möglicherweise auch --pinentry-mode loopback hinzufügen.

Ab Version 2 von GPG, die Option --batch wird benötigt, um keine Eingabeaufforderung zu gewährleisten … Ok, sehen Sie so aus:

$ 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 

Versuch:

$ 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 

klingt gut! Nun, jetzt:

$ 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 

Während kein -d -Parameter angegeben ist (gleiche Syntax wie SOs Frage), Entschlüsselte Daten aus file.gpg werden in eine neue file extrahiert.

$ 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 

Das funktioniert gut!

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

Für Empfänger-Schlüsseldatei :

Erste saubere Tempo-Erstellung

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. 

Dann jetzt

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] 

Dann könnten die letzten 8 Zeichen vom Pub-Fingerabdruck als Schlüsselalias verwendet werden.

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

Ok, jetzt!

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

oder

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

Gibt Folgendes an:

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

Dann wird

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

oder

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

Folgendes rendern:

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 

Kommentare

  • Sie erhalten keine Warnung " gpg: gpg-agent ist nicht verfügbar In dieser Sitzung " haben Sie wahrscheinlich die Passphrase im Agenten gespeichert, vielleicht?
  • @AsfandYarQazi Nein, die Passphrase wird in der Befehlszeile eingegeben.
  • Diese Antwort hat bei mir funktioniert. Ubuntu mit gpg 1.4.16. Der Parameter --passphrase funktioniert für Stapeloperationen und fordert ' nicht zur Eingabe eines Kennworts auf.
  • Dies kann scheint zu funktionieren, weil der nervige gpg-Agent die Passphrase zwischenspeichert. Versuchen Sie, das System vollständig neu zu starten und neu zu starten, oder geben Sie die falsche Passphrase 5678 (falsche Passphrase) ein.
  • Siehe untere Antwort. Der Schlüssel lautet --pinentry-mode loopback. Es funktioniert!

Antwort

Für gpg Version 2.x Sie müssen --batch nicht verwenden, nur

--pinentry-mode loopback 

funktioniert mit --passphrase & --passphrase-file und ermöglicht die Eingabe neuer Informationen, beispielsweise bei Dateinamenkonflikten:

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

Im Gegensatz zu --batch schlägt dies schnell fehl und sagt ...failed: File exists

(getestet auf Debian Stable / Stretch „s gpg 2.1.18. Dieses Verhalten beim Ignorieren wichtiger --passphrase -Optionen sollte wirklich ein Fehler sein, wenn es noch nicht geschehen ist)

Kommentare

  • Dies funktioniert auch unter Ubuntu 18.04 Bionic mit gpg (GnuPG) 2.2.4
  • nach der Installation unter MacOS gpg with homebrew
  • Dies funktioniert bei mir cat your-passphrase-file.txt | gpg --pinentry-mode loopback --passphrase-fd 0 --sign your-file-to-sign.txt
  • Vielen Dank, es funktioniert auch bei der Entschlüsselung

Antwort

Es hört sich so an, als würden Sie gpg2 verwenden. Sie müssen auch die Option --batch eingeben. (Wenn Sie dies einem Skript hinzufügen möchten, möchten Sie auch --no-tty und wahrscheinlich --yes hinzufügen.)

Kommentare

  • Es ' s 1.4. Die Verwendung von –batch hat keine Auswirkung.
  • Entschuldigung, dann @Nima. Ich weiß ' nicht, was ich Ihnen sagen soll. Mit GnuPG v1.4 sollten Sie ' nichts anderes tun müssen, um die Passphrase mit einer dieser Optionen weiterzugeben.
  • Gute Anmerkung, @rsaw, hat geholfen Ich verhindere Passwortabfragen (und etwas weniger elegante Echo / STDIN-Option).
  • – Batch half sogar in Windows. woo hoo.

Antwort

für mich, das Hinzufügen von „–no-use-agent“ löste dieses Problem „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 

Antwort

If using gpg (GnuPG) 2.2.7 Laut Manpage

–passphrase-fd n

Lesen Sie die Passphrase von Dateideskriptor n. Nur die erste Zeile wird aus dem Dateideskriptor n gelesen. Wenn Sie 0 für n verwenden, wird die Passphrase aus STDIN gelesen. Dies kann nur verwendet werden, wenn nur eine Passphrase angegeben ist.

– Passphrase-Datei file

Liest die Passphrase aus der Datei. Nur die erste Zeile wird aus der Datei gelesen. Dies kann nur verwendet werden, wenn nur eine Passphrase angegeben wird. Offensichtlich ist eine in einer Datei gespeicherte Passphrase von fraglicher Sicherheit, wenn andere Benutzer diese Datei lesen können. Verwenden Sie diese Option nicht, wenn Sie sie vermeiden können.

–passphrase string

Verwenden Sie string als Passphrase. Dies kann nur verwendet werden, wenn nur eine Passphrase angegeben wird. Dies ist auf einem Mehrbenutzersystem von sehr fragwürdiger Sicherheit. Verwenden Sie diese Option nicht, wenn Sie sie vermeiden können.

add --pinentry-mode loopback um zu arbeiten

Beachten Sie, dass diese Passphrase seit Version 2.0 nur verwendet wird, wenn auch die Option –batch angegeben wurde . Seit Version 2.1 muss auch der –pinentry-Modus auf Loopback gesetzt werden.

Zum Beispiel:

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

Kommentare

  • Sind sowohl die --batch als auch --pinentry-mode loopback Optionen, die benötigt werden, damit eine –passphrase … Option funktioniert? In Version 2.1.18 sagt die Infoseite dasselbe (aber nicht die Manpage) über den Stapel &, der benötigt wird, funktioniert aber immer noch nur mit –pinentry … Wenn beides werden wirklich für v.2.2.7 benötigt, dann werden die Dinge lächerlich, Entwickler führen absichtlich schwerwiegende Fehler ein

Antwort

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 

Antwort

Es hat für mich wie Magie funktioniert:

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

Kommentare

  • Fehler: gpg: no valid OpenPGP data found. gpg: processing message failed: eof. Irgendwelche Ideen?

Antwort

haben Sie versucht:

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

Quelle: Hier

Antwort

Wie in man gpg erwähnt, kann die folgende Option verwendet werden:

–pinentry-mode mode Setzt den pinentry-Modus auf mode. Zulässige Werte für den Modus sind:

 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. 

Das Standardverhalten von gpg besteht also darin, den Benutzer zur Passphrase aufzufordern, wenn dieser Benutzeragentenmodus in „–pinentry-mode“ geändert wird Loopback „Es funktioniert einwandfrei. vollständiger Befehl

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

Antwort

Ich denke, dass dies eine ziemlich sichere Methode ist Das Kennwort für die Befehlszeile lautet:

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

Dadurch wird der Befehl „echo“ erzeugt und ein Dateideskriptor als Pfadname an übergeben gpg (zB / dev / fd / 63). gpg liest dann den Schlüssel von dort. In der Zwischenzeit sollte der Echo-Befehl parallel ausgeführt und sofort beendet werden, wobei der Schlüssel im Puffer des fd verbleibt.

Vorteile sind:

  • Der Befehl gpg hat kein Kennwort in der Befehlszeile.
  • Das Echo ist von kurzer Dauer. Tatsächlich sollte es fast augenblicklich sein.
  • Das Kennwort wird sich niemals auf der Festplatte befinden. Es wird keine Datei gelöscht, und wenn der Befehl unterbrochen wird, bleiben keine Reste

Antwort

Sie werden mir nicht glauben, wenn ich Ihnen sage, dass gpg auf Ubuntu versucht, Ihr Passwort zu erfragen, wenn $ DISPLAY gesetzt ist und nimmt es von der Kommandozeile –password, wenn Sie es deaktivieren. Dies funktioniert wie erwartet:

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

Nur ein weiteres Beispiel für Überentwicklung, denke ich.

Antwort

Hier „sa Link zu einer stackoverflow Antwort, die möglicherweise weitere Hilfe bietet; ich habe eine In einem Projekt, das Massenentschlüsselung / -verschlüsselung durchführt und GnuPG in Bezug auf Passphrasen sehr streng ist, wurde auf die harte Tour gelernt, dass --passphrase nur in seltenen Fällen funktioniert Die Option --passphrase-fd ist zuverlässiger.

Dieses -Skript macht richtig Verwendung der Option --passphrase -fd und wurde öffentlich über Travis-CI getestet, wo Sie Protokolle davon in Aktion finden können.

Jetzt werde ich nicht nur Links zu einer Antwort posten, ohne hier einen Beispielcode anzugeben. Hier ist also ein aktualisiertes „eigenständiges“ Skript, mit dem Sie spielen können:

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

Während das oben genannte nicht so ausgefallen ist wie das li nked protected bei GitHub sollte noch funktionaler sein als die am Anfang dieses Beitrags verlinkte Antwort.

Viel Spaß beim Hacken.

Antwort

Eine einfache Methode, die ich auf einem Linux-Computer gefunden habe, ist: 1) Importschlüssel in gpg: => shell> gpg – importiere private_key.key

2) Entschlüsseln Sie den Namen der Outfile: => shell> gpg —output -d

2.1) Wenn Sie den obigen Befehl eingeben, werden Sie aufgefordert, eine Paraphrase einzugeben. Geben Sie die Paraphrase ein und die GPG-Datei wird entschlüsselt.

Antwort

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

Kommentare

  • Es wäre schön, wenn Sie erklären könnten, warum dies das Problem beheben sollte.
  • Während dieses Code-Snippet die Frage möglicherweise löst, einschließlich einer Erklärung hilft wirklich , die Qualität Ihres Beitrags zu verbessern. Denken Sie daran, dass Sie in Zukunft die Frage für die Leser beantworten, nicht nur für die Person, die jetzt fragt! Bitte bearbeiten Sie Ihre Antwort , um eine Erklärung hinzuzufügen, und geben Sie an, welche Einschränkungen und Annahmen gelten.

Antwort

Setzen Sie am Ende von ~/.gnupg/gpg.conf:

use-agent pinentry-mode loopback 

Am Ende der (möglicherweise neuen) Datei einfügen ~/.gnupg/gpg-agent.conf:

allow-loopback-pinentry 

Führen Sie dann diesen Befehl aus :

echo RELOADAGENT | gpg-connect-agent 

Jetzt können Sie dies ausführen, ohne nach dem Kennwort zu fragen:

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" 

Wobei $ 1 der zu verschlüsselnde Text ist, $ 2 die Benutzer-ID und $ 3 das Passwort.

Hinweis: Ich kann mich nicht erinnern, warum es funktioniert, aber es funktioniert. Wenn Sie die Details kennen, Bitte bearbeiten und hier einfügen.

Antwort

für Ubuntu 18.04 funktionierte dies für mich-

verschlüsseln:

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

entschlüsseln:

gpg some-file.tgz.gpg 

Antwort

Sogar ich hatte das gleiche Problem. Aber keine o f Die hier erwähnten Befehle funktionierten nicht und ich überprüfte auch verschiedene Antworten mit verschiedenen Befehlen, aber nichts funktionierte.

Ich war auf Ubuntu 20.04.1 LTS

Nach vielem Kopfschlagen und Experimentieren diese

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

passphrase.txt -Datei enthält Ihre passphrase.txt, offensichtlich.

Hoffe, es wird helfen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.