使用sed修改行,传递密码哈希变量

时间:2017-05-30 03:01:25

标签: hash sed

我将用户输入的密码传递给Elasticsearch插件的哈希脚本,从中将输出传递给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

2 个答案:

答案 0 :(得分:0)

您是否为此脚本测试了包含空格和星号的密码值?如果没有,我建议您组建一个简单的测试套件来帮助您调试代码。您可能需要在第7行引用$ password的使用

答案 1 :(得分: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与已知间歇性失败的脚本一起使用是一场等待发生的灾难。 (或者,确实已经发生了一个!)