使用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

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

由于您只是替换文件的第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与已知会间歇性失败的脚本的脚本使用是一场灾难。(或者,确实是已经发生的事!(

最新更新