使用shellscript在多个文件中用新的随机密码替换旧密码

时间:2019-07-10 10:30:31

标签: bash sed

我正在尝试用新的随机密码替换多个文件中存在的密码。 我想出了一种使用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

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

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

您的意思是这样的:

QWizardPage

答案 2 :(得分:0)

最后是工作脚本。感谢@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