【问题标题】:Replace old password with new random password in multiple files using shellscript使用 shell 脚本在多个文件中用新的随机密码替换旧密码
【发布时间】:2019-07-10 21:24:57
【问题描述】:

我正在尝试用新的随机密码替换多个文件中的密码。 我想出了一种使用 sed 的方法来做到这一点,但问题是当我将此 sed 运行到一个文件时,它会将所有密码替换为相同的值,每个值都必须使用不同的密码。

cat admin/secrets.ini | sed -e "s/"password:\ .*"/"password:\ `openssl rand -base64 18`"/g"

sed 之前的 grep

sh-3.2# grep -i password adminsrv/secrets.ini
x_db_password: d3RBSmhykadfnvkadfWcHdDUA==
y_db_password: WXNKVFEunfvabfvlURzNFeQ==
z_password: Ymfvmidmlu

sed 之后的 grep

sh-3.2# grep -i password adminsrv/secrets.ini
x_db_password: uTtDyP7aNeONxxOD7MhFH5Eb
y_db_password: uTtDyP7aNeONxxOD7MhFH5Eb
z_password: uTtDyP7aNeONxxOD7MhFH5Eb

在这里,我希望将每个值替换为多个此类文件中的新随机值。

如果有任何其他方法可以在单个脚本中执行此操作,请提出建议。

【问题讨论】:

标签: bash sed


【解决方案1】:

这是一个似乎可以工作的awk 版本。

cat admin/secrets.ini
Not this
x_db_password: d3RBSmhykadfnvkadfWcHdDUA==
y_db_password: WXNKVFEunfvabfvlURzNFeQ==
z_password: Ymfvmidmlu
Not this

awk '/password/ {printf "%s ",$1;system("openssl rand -base64 18")} !/password/' admin/secrets.ini
Not this
x_db_password: d3RBSmhykadfnvkadfWcHdDUA==
y_db_password: WXNKVFEunfvabfvlURzNFeQ==
z_password: Ymfvmidmlu
Not this

【讨论】:

    【解决方案2】:

    你的意思是这样的:

    #!/bin/bash
    while read -r line; do
       echo "${line% *} $(openssl rand -base64 18)" 
    done < secrets.ini > new_secrets.ini
    

    【讨论】:

      【解决方案3】:

      最后是工作脚本。感谢@Jotne

      N=$(date +%s)
      rsync --recursive secrets/core/* secrets/$N/
      for i in `find secrets/$N/* -iname secrets.ini`; 
      do 
      awk '/password/ {printf "%s ",$1;system("openssl rand -base64 18")} !/password/' $i > $i.tmp && mv $i.tmp $i; 
      done
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-06
        • 2022-10-26
        • 2018-07-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多