2017-05-30 5 views
2

ユーザ入力のパスワードをElasticsearchプラグインのハッシングスクリプトに渡します。その出力から静的な認証ファイルを変更するために出力がsedに渡されます。スクリプトが失敗することがありますが、私の推測はハッシュされた出力によるものです。これを改善し、時々失敗するのを防ぐためのコードに関する提案はありますか? SEDコマンドは元のハッシュされたパスワード行を削除し、新しいパスワード行を挿入することに注意してください。sedを使って行を修正し、パスワードハッシュ変数を渡す

stty -echo 
printf "Please enter a password for the admin user: " 
read password 
stty echo 
printf "\n" 
chmod +x /usr/share/elasticsearch/plugins/search-guard-5/tools/hash.sh 
passwordhash=$(/usr/share/elasticsearch/plugins/search-guard-5/tools/hash.sh -p $password) 
sed -i '4d' /usr/share/elasticsearch/plugins/search-guard-5/sgconfig/sg_internal_users.yml 
sed -i "3 a\ \hash: $passwordhash" /usr/share/elasticsearch/plugins/search-guard-5/sgconfig/sg_internal_users.yml 
+0

_How_このスクリプトは時折失敗しますか?あなたの質問を直接更新してください。 – mklement0

答えて

0

スペースとアスタリスクを含むパスワードの値についてこのスクリプトをテストしましたか?そうでない場合は、コードをデバッグするためのシンプルなテストスイートをまとめておくことをお勧めします。 7行目の$ passwordの使用を引用する必要があるかもしれません。

0

ファイルの4行目を置き換えるだけなので、sedを非常に異なった方法で使用することを強く推奨します。私はどうなる:断続的に失敗することが知られているスクリプトを使用してsed -iを使用して

trap 'rm $tmp' 0 
tmp=$(mktemp) 
input=/usr/share/elasticsearch/plugins/search-guard-5/sgconfig/sg_internal_users.yml 
sed 3q "$input" > $tmp 
echo " \hash: $passwordhash" >> $tmp 
sed 1,4d "$input" >> $tmp 
# Some command here to validate $tmp 
mv $tmp $input 

が起こるのを待っている災害です。 (または、実際にはすでに発生しているもの)

+0

ありがとう、私は実際にこのようなすべての特殊文字をエスケープしてしまいましたが、次回これを試します! passwordhash = $(/ usr/share/elasticsearch/plugins/search-guard-5/tools/hash.sh -p $ password) passwordhash = $(sed -e 's /[]\/$*.^ [ ]/\\&/ g '<<< "passwordhash") –

関連する問題