【问题标题】:Using sed to modify line, passing a password hash variable使用 sed 修改行,传递密码哈希变量
【发布时间】:2017-10-30 08:50:12
【问题描述】:

我正在将用户输入的密码传递给 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

【问题讨论】:

  • 如何脚本偶尔会失败?请直接更新您的问题。

标签: hash sed


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 谢谢,我实际上只是像这样转义了所有特殊字符,但下次会尝试!密码哈希=$(/usr/share/elasticsearch/plugins/search-guard-5/tools/hash.sh -p $password) 密码哈希=$(sed -e 's/[]\/$*.^|[] /\\&/g'
    猜你喜欢
    • 2012-07-16
    • 2023-03-31
    • 2020-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-06
    • 2014-12-13
    相关资源
    最近更新 更多