【发布时间】:2015-10-22 00:59:46
【问题描述】:
我有一个在 Linux 机器上运行的脚本,它读取命令并在某些事件上调用程序。
我们需要记录这些命令,但是在使用密码参数时过滤/替换密码参数,方法是连续输入五个 X (XXXXX)。
输入示例
bash 脚本接收的输入有一个命令类型,后跟各种参数,如下所示:
-
adduser --username="foo" --password="bar" remove --username="foo"listuserschangepass --username="foo" --password="bar"
基本格式为command parameter="" parameter=""...
记录值示例
上面的值在日志中看起来像这样:
-
adduser --username="foo" --password="XXXXX" remove --username="foo"listuserschangepass --username="foo" --password="XXXXX"
我的尝试
我尝试使用 bash 替换,但在第一种情况下,我们没有引用密码(我们后来发现这将通过引号传递)。它会切断密码后的一切。第二个选项根本不进行替换。
echo "${value%password=*}password=XXXXXX" >> somelog.logecho "${value/password=\"(.*?)\"/password=xxxxx }" >> somelog.log
我觉得第二个选项很接近,但我错过了一些东西。如果有人可以指导我,将不胜感激。
【问题讨论】:
-
你的问题意味着另一个问题;您是否将
$value传递给eval?我建议修改脚本,使value实际上是一个数组,例如cmd=(adduser --username="foo" --password="bar")。然后您将使用"${cmd[0]}" "${cmd[@]1:}"执行,并使用${cmd[@]/password=*/password="XXX"}登录;替换分别应用于每个数组元素,而不是整个命令行。
标签: regex linux bash passwords