我正在从(Perl,bash)脚本中调用以下命令:
gpg --batch --yes --default-key C0FFEEABCDEF0123 --clearsign some_file.txt
但是我的钥匙串中不存在该密钥(C0FFEEABCDEF0123
),因为有错字或密钥丢失,因此gpg无法使用该密钥进行签名。
发生这种情况时,gpg将查找钥匙串,找到“默认默认”钥匙(表示它会在没有--default-key
的情况下选择的钥匙),并尝试使用该钥匙进行签名。
这将导致出现一个密码提示,该脚本将停止,因为该密钥已加密。 (我希望它没有被加密,因为这是一个玩具原型。)
如果gpg找不到指定的密钥,我该如何放弃?
如果密钥已加密并且没有密码就无法使用,怎么办?
答案 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