パスワードを暗号化し、「notset」という単語を暗号化された新しいパスワードに置き換えようとしています。問題は、opensslが時々2行以上を含む文字列を生成することです。たとえば、次のようになります。
Salted__▒ہ▒ >▒▒1▒▒▒E
ǣ▒▒▒▒"e=8▒lj▒{`(̣▒e
したがって、sedを実行すると失敗します。
これは私が使用するコマンドです:
sed -i 's/PASSWORD=.*/PASSWORD='${P}'/' ${PFILE}
私が受け取ったエラーは次のとおりです。
sed: -e expression #1, char 49: unterminated `s' command
このワイヤゲートがある場合は、文字列全体を交換する方法を知っている人はいますか?私は前にこれを試してみました。
P=`echo ${P} | tr '\n' "\\n"`
しかし、これは役に立ちません。
答え1
変数は次のとおりです。いいえ(ほとんどのシェルでは)ランダムなバイナリ値を含みます。
P
次の価値を生み出すことで:
P=$( echo 'mysuperpassword3' |
openssl enc -aes-256-cbc -pbkdf2 -pass pass:'secret')
$var
NULバイト、改行、拡張、その他多くの問題が発生する可能性があります。考えられる解決策の1つは、値をbase64エンコーディングとして保存することです。
P=$( echo 'mysuperpassword3' |
openssl enc -aes-256-cbc -pbkdf2 -base64 -pass pass:'secret')
これにより多くの問題を回避できますが、まだ変数拡張を引用する必要があります。
sed -i 's/PASSWORD=.*/PASSWORD='"${P}"'/' "${PFILE}"