ファイルを復号化して書き出すコマンド(ansible-vault decrypt
)があります。ファイルまたは-
/stdout
に書き出すことができます。
次に、この復号化されたファイル(秘密鍵)を、mycommand --key-file <path to file>
のような引数を期待する別のコマンドで使用したいと思います。
現在のスクリプトはansible-vault decrypt --output mykey.key
を実行して復号化されたファイルをディスクに書き込み、次にmycommand --key-file mykey.key
を実行して、最後にrm mykey.key
で削除します。
復号化されたファイルをディスクにまったく書き込まず、mycommand
がファイルのようにアクセスできるようにする方法はありますか?
Stdinからキーをまったく読み取らないため、2番目のコマンドにパイプすることはできません。私が考えることができる唯一のことは、コマンドを実行する前にramdiskを作成し、そこにキーを書き込み、すべてのコマンドが実行されたらramdiskをアンマウントすることです。
コマンドがファイル名を予期しているが、ファイルの種類は気にしない場合は、パイプを介してデータを渡し、ファイル名として/dev/stdin
を指定できます。 /dev/stdin
は標準入力を指します。
ansible-vault decrypt | mycommand --key-file /dev/stdin
mycommand
がパイプを受け入れない場合、これは機能しません(通常、プログラムがファイルをシーク可能にする必要がある場合に発生します)。その場合は、一時ファイルにキーを書き込む必要があります。
ほとんどのLinuxシステム(および他の多くのUnixバリアント)には、そのままの状態でメモリ内ファイルシステムがあります。このファイルシステムがマウントされる場所、およびそれを使用するために必要な権限は、ディストリビューションによって異なります。最近のLinuxシステムには /run
を含むいくつかの場所に tmpfs ファイルシステムがマウントされています。通常、すべてのユーザーがログイン時にディレクトリ/run/user/1234
を取得します。1234はユーザーIDです。多くのサービスは/run
の下に独自のディレクトリを作成し、/var/run
は通常/run
へのシンボリックリンクです。 df -t tmpfs
を使用して、システムで利用できるものを確認します。
一時ファイルシステムに書き込まれたデータは最終的にスワップになる可能性があることに注意してください。メモリの内容も同様です。ハードディスクの盗難が防御したい脅威である場合は、スワップを暗号化する必要があります。ハイバネーションを使用しない場合は、スワップの暗号化にランダムキーを使用できます。これは、起動ごとに生成され、どこにも保存されません。
これはfifo
の本当に良いアプリケーションだと思います。
特別なファイルとして参照されるfifo
を作成し(mkfifo
を使用)、そのファイルへの出力をansibleにして、コマンドがそれを読み取ります。しかし、それはファイルではなく、ストレージに影響を与えません。
推奨されるように、シェルの「ここ」のファイルも適切な候補です(その<(CMD)
構成)。