7

次のようなことをしたい

openssl enc -d -aes256 -in somefile | less

opensslからのパスワードが必要ですstdinlessが関与すると、これはすべて台無しになります。

対話型コマンド (opensslパスワードの要求など) から出力を取得し、出力を にパイプする方法はありますlessか?

または、bash スクリプトを使用するより良い手法はありますか?

4

2 に答える 2

3

おそらく、シェルスクリプトにキーを要求させ、キーを一時ファイルに保存し、openssl の -kfile オプションを使用してそれを見つけます。お使いのバージョンの openssl が -kfile をサポートしていることを願っています。

これでセキュリティが心配になりますが、少し気をつければ、セキュリティ ホールは思ったよりも小さいかもしれません。(しかし、sysadmin と sudoers を信頼していますか?)

#!/bin/bash

INFILE=somefile

read -s -p "Enter key for $INFILE: " key
echo

# write the key to a temp file; use mktemp(1)
# for safer creation of a privately-owned file.
#
TMPKEY=$(mktemp -t) || exit 1
echo "$key" > "$TMPKEY"

# will remove the temp file on script exit
trap 'rm -f "$TMPKEY"' EXIT

# remove the key file a couple seconds after openssl runs
(sleep 2; rm -f "$TMPKEY") &

openssl enc -d -aes256 -in "$INFILE" -kfile "$TMPKEY" | less

[ -f "$TMPKEY" ] && rm -f "$TMPKEY"
trap - EXIT

# rest of script...

exit 0
于 2013-08-23T03:23:22.860 に答える
1

これを試すことができます:

echo 'mypassword' | openssl enc -d -aes256 -in somefile | less

しかし、これは安全ではないようです。

この方法で実行しようとしopensslたことはありませんが、冗長すぎる場合や、前のコードが機能しない場合は、常にexpectを使用してみてください。次に例を示します。

expect -c '
    spawn yourscript
    expect "Please enter your password:"
    send "$PASSWORD"
'
于 2013-08-23T02:38:16.257 に答える