Dockerコンテナでパスフレーズを要求する--passphrase-fdを使用したスクリプトの最新のgpg


0

gpgはDocker Debian:latest自動ビルドとgpgそれが機能するターミナルで使用していますが、スクリプトで使用すると、パスフレーズを要求しますが、私はこれを好きです:

passphrase=$(cat /build/secure/passphrase.txt)
echo $passphrase | gpg --passphrase-fd 0 --import /build/secure/gpg/secret-signing-key.pgp

しかし、私がターミナルでやれば、うまくいきます!

どうして?どうして?


gpg --versionコンテナとホストの両方の出力は何ですか?
イェンスエラ

また--passphrase-file、ファイルから読み取ることで環境変数を設定せずに、を直接使用することもできます。とにかく、echoマルチユーザーマシンの新しいパスフレーズ:他のすべてのユーザーは、他のユーザーが実行した場合でも、実行中の他のすべてのアプリケーションの引数を読み取ることができます。
イェンスエラ

回答:


3

GnuPG 2、gpg-agentおよびループバックピンエントリー

GnuPG 2.0以降では、--passphrase-...-options --batchも適用される場合にのみ考慮されます。からman gpg

このパスフレーズは、オプション--batch も指定されている場合にのみ使用されることに注意してください。これは、GnuPGバージョン1.xとは異なります。

GnuPG 2.0の有効なコマンドは次のとおりです。

gpg --batch --passphrase-fd 0 --import <path>

さらに、GnuPG 2.1以降、gpg-agentすべての秘密鍵操作を処理し、パスフレーズも要求します。この背後にある考え方は、暗号化の最も重要な部分を処理する小さなコアアプリケーションを持ち、潜在的に多くのバグとセキュリティ問題のある(比較的)大きなGnuPGに他のすべてを実行させることです。デフォルトでgpg-agentgpg、パスフレーズを照会しませんが、ユーザーに直接質問しようとします(無人ビルドでは明らかに失敗します)。ただし、最後のエスケープがあります。パスフレーズのクエリ--pinentry-mode loopbackを作成gpg-agentするgpgために使用できますが、これは前述のようにセキュリティに影響を与えるgpg-agentため、ループバックピンエントリを許可するように構成する必要もあります。

に次の行を追加します~/.gnupg/gpg-agent.conf

allow-loopback-pinentry

これで、GnuPG 2.1以降で次のコマンドを使用できるようになります。

gpg --batch --pinentry-mode loopback --passphrase-fd 0 --import <path>

gpg-agentソケットを渡す

秘密鍵をDockerコンテナにインポートするよりも優れたオプションは、通常、ホストに秘密鍵を格納(およびロック解除)し、gpg-agentソケットをDockerコンテナに渡すことです。この方法では、重要な秘密がDockerコンテナーに入力されることはありません。また、イメージレイヤーに保存され、偶然に公開されることはありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.