スクリプトに含まれるファイルを復号化して抽出します。

スクリプトに含まれるファイルを復号化して抽出します。

自動抽出暗号化されたアーカイブを作成しようとしています。これは私にはうまくいかないコードです。

openssl enc -aes-256-cfb -salt -d -a | tar -x -j <<EOF
U2FsdGVkX19f7pGFSqDXJSREp/oDxJD0oii/FYvJlJpO8fB5ttZ/Qc8vSwIOS2y0
QUlWLocow4S1YWf86615Ji3n16RLvhOIRiy9S8DNGXl9C6ea1FYDdiuy2lA75lME
...
8yQIpRng/gXItWlaGJapqW9z2wx7y2im/lPGM8UrwZN9uY3DuRx3XbpMY5yuRWU0
oArQEvKxBAP/bB689j4P291Oauw1E8++na9phkEUXJY=
EOF

出力:

enter aes-256-cfb decryption password:tar: Unrecognized archive format
tar: Error exit delayed from previous errors.

組み込みのbase64データは復号化を使用して復号化する必要があり、opensslその出力はユーザーにパスワードを要求できる必要がありますtar。パイプをopenssl取り外すと:tar

openssl enc -aes-256-cfb -salt -d -a >outfile <<EOF
...

その後、すべてがうまく動作します。だから私はopensslがstdin / stdoutを邪魔することなく端末でパスワードプロンプトと入力を処理できると仮定します(たぶんプロンプトがstderrに移動し、パスワードの読み取りがいくつかのttyマジックを使用して実装される可能性があります)。

私は次の構造でこれを解決しました。

{ openssl enc -aes-256-cfb -salt -d -a | tar -x -j; } <<EOF
...

しかし、最初のスクリプトの問題を理解していません。

答え1

ここで、文書の終わりはopensslの前(または後)でなければなりません。

あなたは何をしましたか:

sed -e s/^/water/ | sed -e s/^/wine/ <<EOF
hello world
EOF

(あなたは必要ですctrl-dここ)

与える:

winehello world

2番目のsedが機能している場合にのみ(水はなくワインのみ)、実行する必要がある作業は次のとおりです。

sed -e s/^/water/  <<EOF | sed -e s/^/wine/
hello world
EOF

与える:

winewaterhello world

ご覧のように、その後はhello worldに変わりました。waterhello worldwinewaterhello world

あなたは試す必要があります

openssl enc -aes-256-cfb -salt -d -a  <<EOF | tar -x -j

関連情報