我想编写一个脚本,运行gpg
一个名为“file”的文件,密码为“test”。
通常,当我使用时gpg
,我通常只需运行gpg -c file
,它就会要求我输入密码。但由于我希望此脚本能够自行完成所有操作,因此我希望将密码作为命令的一部分提供。
现在,当我尝试使用:时gpg -c file --passphrase test
,它会输出:
用法:gpg [选项] --symmetric [文件名]
它似乎想让我使用gpg --passphrase test --symmetric file
。但如果我这样做,它会弹出一个对话框,要求我输入密码;这不是我想要的。
我该如何正确设置参数?
答案1
在 GnuPG 中,选项必须位于命令之前,因此--passphrase
选项必须位于之前--symmetric
。
至于无论如何都会弹出的 pin 输入窗口(尽管您使用的是--passphrase
),您可能已经在使用 GnuPG 2,它需要--batch
与一起使用--passphrase
。来自手册页:
--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.
请注意,在多用户系统中,所有其他用户都能够读取您的命令行,因此在执行 GnuPG 时也能够读取密码。最好使用其他--passphrase-*
选项之一来从文件或管道读取。
答案2
--pinentry-mode loopback
与--passphrase
&配合使用--passphrase-[file/fd]
,可以让您输入新信息,以防文件名冲突,例如:
File 'xyz.gpg' exists. Overwrite? (y/N)n
Enter new filename: xyz2.gpg
与之不同的是--batch
,这将很快失败,说...failed: File exists
如果您最初添加了详细选项(-v
),那么您应该会看到类似以下内容:
$ 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
( --symmetric
) 放在第一位。
我认为 gpg2 忽略选项的行为--passphrase
(除非伴随)--batch
是一个错误。
答案3
如果gpg --version
报告v2,则需要添加--batch
选项。
根据语法输出,您可能正在使用 v1,在这种情况下您需要:
gpg --passphrase PASS -c --no-use-agent FILE
请注意,选项的顺序并不重要;但是任何文件都需要作为最后一个参数。