当找不到--default-key时,如何防止gpg选择后备密钥?

时间:2019-10-16 17:20:04

标签: gnupg

我正在从(Perl,bash)脚本中调用以下命令:

gpg --batch --yes --default-key C0FFEEABCDEF0123 --clearsign some_file.txt

但是我的钥匙串中不存在该密钥(C0FFEEABCDEF0123),因为有错字或密钥丢失,因此gpg无法使用该密钥进行签名。

发生这种情况时,gpg将查找钥匙串,找到“默认默认”钥匙(表示它会在没有--default-key的情况下选择的钥匙),并尝试使用该钥匙进行签名。

这将导致出现一个密码提示,该脚本将停止,因为该密钥已加密。 (我希望它没有被加密,因为这是一个玩具原型。)

如果gpg找不到指定的密钥,我该如何放弃?

如果密钥已加密并且没有密码就无法使用,怎么办?

2 个答案:

答案 0 :(得分:4)

  

如果gpg找不到指定的密钥,我该如何放弃?

gpg --batch --yes -u C0FFEEABCDEF0123 --clearsign some_file.txt

gpg: skipped "C0FFEEABCDEF0123": No secret key
gpg: some_file.txt: clear-sign failed: No secret key

  

如果密钥已加密并且没有密码就无法使用,怎么办?

您可以use the --passphrase-fd --pinentry-mode loopback arguments提供一个空密码(或者也许是change the pinentry program?)。

echo ""|gpg -q --batch --yes -u C0FFEEABCDEF0123 --textmode --passphrase-fd 0 --pinentry-mode loopback --clearsign some_file.txt

gpg: signing failed: No passphrase given
gpg: some_file.txt: clear-sign failed: No passphrase given

要在Windows(无管道)上执行此操作,

@echo off > pass.txt && @echo on && gpg -q --batch --yes -u C0FFEEABCDEF0123 --textmode --passphrase-file pass.txt --pinentry-mode loopback --clearsign some_file.txt & del /q pass.txt

答案 1 :(得分:-1)

如果您不介意使用某些python(脚本编写很不错)。

process = subprocess.Popen(
    "gpg --batch --yes --default-key C0FFEEABCDEF0123 --clearsign some_file.txt",
    shell=True,
    stdout=subprocess.PIPE,
    stderr=subprocess.PIPE,
    stdin=subprocess.PIPE)
process.communicate(input="")
if process.returncode == 0:
    # mb return 0
else:
    # mb return -1