私はFedora 25(F25)ワークステーション(KDEスピン)で作業しています。自動化されたテストを実行するためにいくつかのスクリプトを書いています。
自動化されたテストの1つにはRPMSIGN(8)プログラム呼び出しが含まれていました。これはGPG(1)を呼び出して、私が作成しているいくつかのRPMファイルにデジタル署名を追加しました。もちろん、GPGはpinentry(PIN入力)を使用して、ユーザーにRPM署名キー(RSAキーペア)のパスワードを求めるメッセージを表示します。私は人間をループから外し、RPM署名キーのパスワード提供を完全に自動化したいと思います。 (はい、セキュリティへの影響を知っています。これは本番ホストではなく自動化されたテスト環境にすぎず、セキュリティについてはあまり心配しません。本番ビルドでは、ユーザーは手動でRPM署名キーのパスワードを入力します。)
以前は、EXPECT(1)スクリプトを使用して、GPGが "Enter passphrase:"というテキストをコンソールに出力するのを待ち、続行する前にEXPECTスクリプトがパスワードを入力しました。良い結果。
F25では、pinentry機能は、RPM署名キーのパスワードを自動的に入力する既存のEXPECTベースのソリューションを破ります。
このF25ホストのGUIコンソールウィンドウでRPMSIGNを実行すると、GPGはpinentryを使用してユーザー(私)にRPM署名キーのパスワードを入力するように求めるGUIダイアログを表示します。もちろん、このパスワード入力動作はパスワードフレーズの自動入力を妨げて防止します。
DISPLAY 環境変数を一時的に設定解除する Bash スクリプトを生成すると、GUI ダイアログは表示されなくなります。
#!/bin/bash
DISPLAY_SAVE=$DISPLAY
unset DISPLAY
rpmsign --resign "/path/to/test-1.0.0-1.fc25.noarch.rpm"
export DISPLAY=$DISPLAY_SAVE
ただし、コンソールにこのダイアログボックスのncursesバージョンが表示されるようになりました。
+----------------------------------------------------------------+
| Please enter the passphrase to unlock the OpenPGP secret key: |
| "Testing (rpm-sign)" |
| 1024-bit RSA key, ID 0123456789ABCDEF, |
| created 2016-12-02. |
| |
| |
| Passphrase: __________________________________________________ |
| |
| <OK> <Cancel> |
+----------------------------------------------------------------+
同様に、pinentry-cursesのコンソール「ダイアログボックス」は、自動パスワード入力を妨げ、防止します。
pinentryモジュールを永久に変更したり無効にしたくありません。ただpinentryの干渉なしにGPGのCLIプロンプト「Enter Password:」(または現在のプロンプト文字列)を返すために一時的に無効にしたいと思います。
Pinentry干渉なしにCLIを介してRPM署名キーのパスワード入力を完全に自動化するための提案はありますか?
ベストアンサー1
このgpg-preset-passphrase
ユーティリティを教えてくれた@Joe Damatoに感謝します。以下のソリューションは、インストールされているFedora 25ホストで開発およびテストされていますgnupg2-2.1.x
。
(参考までに、以前のバージョンのGnuPGを実行しているプラットフォームではそのオプションをサポートしていないため、RPM署名キーのキーグリップ値を決定する方法をまだ理解していません。誰--with-keygrip
もがこのソリューションについてコメントしたい場合はそうします。 )
~/.gnupg/gpg-agent.conf
この行を含める必要があります。
allow-preset-passphrase
修正後、~/.gnupg/gpg-agent.conf
gpg-agentを再ロードしてください。
$ gpg-connect-agent reloadagent /bye
OK
RPM署名キーの8つの16進キーIDを取得するには、GPGキーをリストします。この例では、キーIDはです0123ABCD
。
$ gpg --list-keys
/home/me/.gnupg/pubring.gpg
-----------------------------------
pub 1024R/0123ABCD 2015-06-13
uid Test (rpm-sign)
RPM署名キーを取得するためのキーグリップコード。 (テストに使用したRHEL 7.2およびFedora 20ホストでは、GPG2(1)
そのホストのプログラムはこのオプションを認識しませんでした--with-keygrip
。)
$ gpg2 --with-keygrip -K 0123ABCD
sec rsa1024 2015-06-13 [SCEA]
0A1B2C3D4E5F6A7B8C9D0E0F1A2B3C4D0123ABCD
Keygrip = 2EACA0C5A4B46168EB91970B6715AF1AA52968BE
uid [ unknown] Test (rpm-sign)
RPM署名キーをキャッシュするためのパスワード。以下のコマンドラインで'PASSPHRASE'
RPM署名キーを実際のパスワードに置き換えます。
$ /usr/libexec/gpg-preset-passphrase --passphrase 'PASSPHRASE' --preset 2EACA0C5A4B46168EB91970B6715AF1AA52968BE
::テスト::
署名されていないテストRPMファイルを作成します。テストRPMファイルが署名されていないことを確認してください。
$ rpm --checksig test-1.0.0-1.f25.noarch.rpm
test-1.0.0-1.fc25.noarch.rpm: sha1 md5 OK
テストRPMファイルに署名するときにRPMSIGN(8)
キャッシュされたパスワードが使用されていることを確認してください(つまり、RPMSIGN(8)
RPM署名キーのパスワードを求めるプロンプトは表示されません)。
$ rpmsign --resign test-1.0.0-1.f25.noarch.rpm
テストRPMファイルが署名されていることを確認してください。
$ rpm --checksig test-1.0.0-1.f25.noarch.rpm
test-1.0.0-1.fc25.noarch.rpm: rsa sha1 (md5) pgp md5 OK
:: 付録 1 (2016-12-17) ::
これによるとGnuPGの問題2331 Webページ:
gpg1はキーグリップについて知りません。 gpg1 は、キーグリップの代わりに指紋を gpg-agent のキャッシュ ID として使用します。 gpg1 で使用されるプロキシコマンド GET_PASSPHRAE は、gpg-preset-passphrases で使用されるものとは異なるキャッシュモードを使用します。そのため、キーハンドルを(サブ)キーの指紋に交換しても機能しません。
とにかく、RHEL7ホストでGnuPGバージョン2.0.xを使用していくつかのテストを実行しましたが、gpg-preset-passphrase
サポートされていないようです。gpg-preset-passphrase
GnuPG バージョン 2.1.x のみ使用できます。