暗号化された(GPG)ファイルをオンザフライでスクリプトで調達する方法はありますか?


8

入手するファイルには機密情報が含まれているため、暗号化されたファイルを入手するにはbashスクリプトが必要です。

スクリプトでGPGパスフレーズの入力を求めてから実行し、暗号化されたファイルを取得します。これを行う方法はわかりません。暗号化されたファイルと共にサーバーにキーを保存したくないので、パスフレーズのユーザー入力が必要です。

いくつかの異なる方法を検討していますが、ファイルを復号化せずに、暗号化されていないファイルを取得し、後で削除します。スクリプトに問題が発生した場合に、暗号化されていないファイルが残る可能性を減らしたいと思います。

この方法でそれを調達するファイルのGPG出力を取得する方法はありますか?STDOUTを収集して解析する可能性があります(GPGがコンテンツをこのように出力できる場合)。

また、シェルスクリプトが使用できるファイルを暗号化する別の方法がある場合、私はそれを認識していませんが、他の可能性を開いています。

回答:


16

これは、プロセス置換を使用して行うことができます。

. <(gpg -qd "$encrypted_filename")

次に例を示します。

% cat > to-source <<< 'echo "Hello"'
% . ./to-source                     
Hello
% gpg -e -r chris@chrisdown.name to-source
% . <(gpg -qd to-source.gpg)
Hello

gpg -dファイルをディスクに永続化せず、標準出力に出力するだけです。FIFOを<()使用しているため、実際のファイルデータがディスクに書き込まれることもありません。

bashのでは、.source同義語ですが、.私はここでそれを使用しましたので、(POSIXのそれの一部)より移植です。ただし、これ<()は移植性が低いことに注意してください-私が知る限り、それはbash、zsh、ksh88、およびksh93でのみサポートされています。pdkshとmkshには、同じ効果を持つプロセスがあります。


これは非常に優れたソリューションです。名前付きパイプを考えたが、それを管理したくなかった。このようにできるとは知りませんでした。
BriGuy、2015年

もちろん、誰かが一時FILEを読み取ることができるという心配がある場合、これによって、によって作成された一時パイプを読み取ることができるというまったく同じ心配があり<(command)ます。
Zan Lynx

@ZanLynx質問は、これがディスク上に永続化しないことについて明確に述べています。それ以外の点で安全にこれを行う解決策は、他のすべての場所と同じです。自分だけが制御できるユーザーを使用し、自分だけがrootを持つシステムで実行します。
クリスダウン、

1
aescrypt暗号化ファイルを使用してこれを行うこともできます(これは私が行いました): . <(aescrypt -d -o - file.aes)
Freedom_Ben

3

あなたが持っていればgpg-agent使用して、適切に設定pinentry-ttyまたは汚染標準入力/標準出力、そしてあなたのような何かを行うことができるはずはありませんいくつかの他のバージョン:

source <( gpg --decrypt file.gpg )

これは、プロセス置換を使用してsource、ファイルであるかのように結果をフィードします。特定のファイルデータは、シェルがそれを使用するとすぐに消えますが、その後、シェルのメモリ内の機密データに注意する必要があります。


0

最も健全な答えがすでに与えられているので、ここに異常な答えがあります-このファイルシステムを使用してください:

https://github.com/jseppanen/gpgfs

このようにして、プログラムはパイプと通信していることに気付きません。

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