gpg
Ich möchte ein Skript schreiben, das eine Datei namens „file“ mit der Passphrase „test“ ausführt .
Normalerweise führe ich bei der Verwendung gpg
einfach aus gpg -c file
und werde nach der Passphrase gefragt. Da dieses Skript aber alles selbst erledigen soll, möchte ich die Passphrase als Teil des Befehls angeben.
Wenn ich jetzt versuche, Folgendes zu verwenden: gpg -c file --passphrase test
wird Folgendes ausgegeben:
Verwendung: gpg [Optionen] --symmetric [Dateiname]
Das sieht so aus, als ob ich verwenden soll gpg --passphrase test --symmetric file
. Wenn ich das aber tue, wird ein Dialogfeld angezeigt, in dem ich nach der zu verwendenden Passphrase gefragt werde. Das ist aber nicht das, was ich möchte.
Wie baue ich die Argumente richtig auf?
Antwort1
In GnuPG müssen Optionen vor Befehlen stehen, daher --passphrase
muss die Option vor stehen --symmetric
.
Was das Pin-Eingabefenster betrifft, das trotzdem erscheint (obwohl Sie verwenden --passphrase
), verwenden Sie wahrscheinlich bereits GnuPG 2, das --batch
zusammen mit verwendet werden muss --passphrase
. Aus den Manpages:
--passphrase string
Use string as the passphrase. This can only be used if only one
passphrase is supplied. Obviously, this is of very questionable
security on a multi-user system. Don't use this option if you
can avoid it. Note that this passphrase is only used if the
option --batch has also been given. This is different from
GnuPG version 1.x.
Beachten Sie, dass auf Mehrbenutzersystemen alle anderen Benutzer Ihre Befehlszeile und damit auch die Passphrase lesen können, während GnuPG ausgeführt wird. Verwenden Sie --passphrase-*
stattdessen besser eine der anderen Optionen, um aus einer Datei oder Pipe zu lesen.
Antwort2
Die Verwendung --pinentry-mode loopback
funktioniert mit --passphrase
& --passphrase-[file/fd]
und ermöglicht Ihnen die Eingabe neuer Informationen, beispielsweise im Falle von Dateinamenkonflikten:
File 'xyz.gpg' exists. Overwrite? (y/N)n
Enter new filename: xyz2.gpg
im Gegensatz --batch
zu dem wird schnell scheitern, sagen...failed: File exists
Wenn Sie zuerst die ausführliche Option () hinzugefügt hätten -v
, sollten Sie etwas wie Folgendes gesehen haben:
$ gpg -v -c file --pinentry-mode loopback --passphrase-file=passfile
gpg: Note: '--pinentry-mode' is not considered an option
gpg: Note: '--passphrase-file=passfile' is not considered an option
usage: gpg [options] --symmetric [filename]
-c
was ziemlich deutlich darauf hinweist, dass ihm die Tatsache, ( ) an die erste Stelle zu setzen, nicht gefiel --symmetric
.
Ich betrachte das Verhalten von gpg2, --passphrase
Optionen zu ignorieren, sofern sie nicht von begleitet werden, --batch
als einen Fehler.
Antwort3
Wenn gpg --version
v2 gemeldet wird, müssen Sie die --batch
Option hinzufügen.
Basierend auf der Syntaxausgabe verwenden Sie wahrscheinlich Version 1. In diesem Fall benötigen Sie:
gpg --passphrase PASS -c --no-use-agent FILE
Beachten Sie, dass die Reihenfolge der Optionen nicht wichtig ist. Das letzte Argument muss jedoch „any file“ sein.
Antwort4
Sie können es folgendermaßen verwenden:
gpg --passphrase hello -c --no-symkey-cache --cipher-algo AES256 --batch basic.c
Auch die Verwendung von Batch ist kein Fehler, es wurde in der Dokumentation geschriebenHier: