【问题标题】:How to anonymize all passwords in a file in bash如何匿名化bash文件中的所有密码
【发布时间】:2013-09-24 06:13:29
【问题描述】:

假设您有一个包含密码和其他机密数据的大型配置文件。该文件将来可能会更改。我想用占位符代替这种数据,例如*** 使用 bash 创建当前配置的版本,不包含分类信息。

该文件确实具有以下形式:

user_foo=Foo
foo_pwd=12345
user_bar=Bar
bar_password_x=42
a.passwd=asdf

应该转化为

user_foo=Foo
foo_pwd=***
user_bar=Bar
bar_password_x=***
a.passwd=***

一些脚本接受包含在分配者左侧的字符串黑名单(例如,“pwd”、“password”、“passwd”)可能是这样做的方法。

不幸的是,我不是 bash 专家,但也许有一个基于 sed 或 awk 的优雅解决方案。

【问题讨论】:

  • 只有用另一个密码加密才能保存好。其他形式可能只是通过模糊或混淆,仍然可以在没有密码的情况下解码。

标签: string bash replace sed awk


【解决方案1】:

试试:

awk 'BEGIN{FS="="; OFS="="; } $1 ~ /pwd|password|passwd/ {$2="***"}1' inputfile

对于您的输入,它应该发出:

user_foo="Foo"
foo_pwd=***
user_bar="Bar"
bar_password_x=***
a.passwd=***

【讨论】:

  • 谢谢。我注意到如果密码本身包含“=”,它仍然包含在该行中。
【解决方案2】:

使用 sed:

sed -r 's/((pwd|password|passwd)[^=]*=).*/\1***/' input > output

【讨论】:

  • 只能在 gnu sed 中工作。 Mac 自带 BSD 版本,不支持-r 选项。
  • 是的,BSD sed 可能有一个等价物,我只是想不通,然后转到我的 Linux 机器上。
【解决方案3】:

使用awk

awk -F= '$1~/pwd|password|passwd/ {$2="***"}1' OFS="="
user_foo=Foo
foo_pwd=***
user_bar=Bar
bar_password_x=***
a.passwd=***

【讨论】:

  • 需要指定=作为输出分隔符
  • 猜猜如果输入中的一行是:user_foo=pwd
猜你喜欢
  • 1970-01-01
  • 2022-12-14
  • 1970-01-01
  • 2018-03-21
  • 2022-10-21
  • 2012-11-04
  • 2023-04-06
  • 1970-01-01
  • 2011-02-16
相关资源
最近更新 更多