署名されたファイルをGPGにフィードすると、「signature is good」メッセージが出力され、プレーンテキストが保存されます。
[gh403@shillig-Arch ~]$ gpg test.gpg
gpg: Signature made Thu Nov 1 14:19:08 2012 CDT using RSA key ID D1FEC5F4
gpg: Good signature from "gh403 <gh403@***********>"
そして、その出力を見て、はい、gh403がこれに署名し、はい、署名が良好であることを確認できます。
私ができるようにしたいのは、この動作をスクリプト化することです。具体的には、署名が適切であることを確認するスクリプトが必要ですそして署名されたキーが特定のIDを持っていることを確認します。
これを行うための単純なGPG呼び出しはありますか?それとも、もっと手の込んだスクリプトが必要ですか?考えてくれてありがとう!
--status-fd <fd>
を追加すると、gpgはコンピューターで読み取り可能なステータステキストを指定されたファイル記述子(stdoutの場合は1
)に出力します。例えば:
$ gpg --status-fd 1 --verify authorized_keys.txt
gpg: Signature made 2012-08-18T19:25:12 EEST
gpg: using RSA key D24F6CB2C1B52632
[GNUPG:] SIG_ID BOn6PNVb1ya/KuUc2F9sfG9HeRE 2012-08-18 1345307112
[GNUPG:] GOODSIG D24F6CB2C1B52632 Mantas Mikulėnas <[email protected]>
gpg: Good signature from "Mantas Mikulėnas <[email protected]>"
gpg: aka "Mantas Mikulėnas <[email protected]>"
[GNUPG:] VALIDSIG 2357E10CEF4F7ED27E233AD5D24F6CB2C1B52632 2012-08-18 1345307112 0 4 0 1 2 00 2357E10CEF4F7ED27E233AD5D24F6CB2C1B52632
[GNUPG:] TRUST_ULTIMATE
次に、(2> /dev/null
をリダイレクトして)デフォルトの出力を破棄し、VALIDSIG fingerprint
を確認します。
私は以下を使用します:
fprint="2357E10CEF4F7ED27E233AD5D24F6CB2C1B52632"
verify_signature() {
local file=$1 out=
if out=$(gpg --status-fd 1 --verify "$file" 2>/dev/null) &&
echo "$out" | grep -qs "^\[GNUPG:\] VALIDSIG $fprint " &&
echo "$out" | grep -qs "^\[GNUPG:\] TRUST_ULTIMATE\$"; then
return 0
else
echo "$out" >&2
return 1
fi
}
if verify_signature foo.txt; then
...
fi
おそらくTRUST_ULTIMATE
チェックを削除する必要がありますが、VALIDSIG
は保持します。