bash脚本检查GPG签名是否有效且属于某个密钥

5 投票
2 回答
5862 浏览
提问于 2025-04-16 15:06

我正在尝试写一个bash脚本,用来检查给定的签名是否有效。我有两个可能的输出结果:

$ gpg --no-default-keyring --keyring /etc/pubring.gpg  --verify file.tgz.sig file.tgz

错误

gpg: Signature made Tue 05 Apr 2011 11:01:19 CEST using RSA key ID E32804F0
gpg: Can't check signature: public key not found

正确

gpg: Signature made Tue 05 Apr 2011 11:01:19 CEST using RSA key ID E32804F0
gpg: Good signature from "Test key <test@localhost>"

我想知道怎么能在不解析结果的情况下,判断检查是否正确。

这个问题和用Perl验证GPG文件签名类似,但我想用bash来实现(如果非常需要的话,也可以用Python)。

2 个回答

1

来自GnuPG的手册:

这个程序如果一切正常,会返回0;如果至少有一个签名出错,会返回1;其他的错误代码则表示严重错误。

所以你可以使用 http://docs.python.org/library/subprocess.html 来获取 gpg 的返回代码。

8

我不知道 gpg 这个命令,但它在结果“错误”和“正确”时会返回不同的退出值吗?运行这个命令后,检查这个的最简单方法是:

echo $?

我希望如果一切正常,它返回0;如果不正常,就返回其他值。所以你的bash脚本看起来会是:

gpg --no-default-keyring --keyring /etc/pubring.gpg --verify file.tgz.sig file.tgz

if [ $? -eq 0 ]
then
    echo All is well.
else
    echo Problem with signature.
fi

撰写回答