0
2

More than 3 years have passed since last update.

Azure Pipelines で GnuPG 署名を自動化する方法

Posted at

Azure Pipelines に限った話ではなく、 CI で GnuPG による署名を自動化する話です。

パスフレーズ入力の自動化

gpg コマンドのオプションで --passphrase オプションを使えば、とりあえずパスフレーズを渡せるのですが、最近の GnuPG だと --batch--pinentry-mode loopback を使わないと有効にならなかったり、対話的に署名したい場合とコマンドを使い分けが必要だったりするので別の方法を考えました。

そこで注目したのが gpg-preset-passphrase コマンド。 GnuPG のパスフレーズをキャッシュに事前設定するコマンドです。

ドキュメントによると、引数の cacheid は GnuPG 鍵の ID ではなくて keygrip を指定するとのこと。 keygrip はとりあえず次で取れることを確認。

keygrip=`gpg --list-secret-keys --with-colons '鍵の ID' | \
    awk -F : '$1 == "grp" { print $10 }'`

なお gpg-preset-passphrase コマンドを利用するには、 gpg-agent--allow-preset-passphrase オプション付きで実行する必要があるので、 gpg を最初に使う前に一度だけ以下を実行しておきます。

echo allow-preset-passphrase >> $HOME/.gnupg/gpg-agent.conf

最後に、 gpg-preset-passphrase を次のように実行すれば準備完了。

echo 'パスフレーズ' | \
/usr/lib/gnupg/gpg-preset-passphrase --preset "$keygrip"

以上で、 gpg コマンドがパスフレーズを尋ねてこなくなりました。めでたしめでたし。

0
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2