2017-05-30 39 views
2

我將用戶輸入的密碼傳遞給Elasticsearch插件的散列腳本,從中將輸出傳遞給sed以修改靜態auth文件。有時腳本失敗了,我的猜測是由於哈希輸出。關於代碼的任何建議,以改善這種情況並防止它偶爾失敗?請注意,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

_腳本如何偶爾失敗?請直接更新您的問題。 – mklement0

回答

0

您是否測試了此腳本以獲取包含空格和星號的密碼值?如果不是的話,我建議你組裝一個簡單的測試套件來幫助你調試你的代碼。你可能需要引用你在第7行使用$密碼

0

因爲你只是替換文件的第4行,所以我強烈建議使用sed的方式非常不同。我會做:

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 

使用sed -i與已知的間歇性失敗的腳本是一個等待發生的災難。 (或者實際上,已經發生了!)

+0

謝謝,我其實剛剛結束了所有這樣的特殊字符的逃脫,但下次會嘗試這個! passwordhash = $(/ usr/share/elasticsearch/plugins/search-guard-5/tools/hash.sh -p $ password) passwordhash = $(sed -e's /[]\/$*.^ | [ ]/\\&/ g'<<<「$ passwordhash」) –