使用grep时,如何防止密码或其他敏感信息存储在bash历史记录中?


21

我最近不得不grep输入可能已保存在文件中的密码。我不希望该行出现在bash历史中。

使用grep时,如何防止密码或其他敏感信息存储在bash历史记录中?例如,如何让grep从stdin或控制台读取模式?

Answers:


37

如果您HISTCONTROL=ignorespace输入.bashrc,并且在命令名称之前放置空格,则不会将其添加到您的历史记录中。

$ export HISTCONTROL=ignorespace
$ grep "passwd" secret_password_file.txt   # added to history
$  grep "passwd" secret_password_file.txt  # not added to history

3
FWIW:标题中的问题与正文中的问题完全不同。我回答了标题中的问题。

您的批评是适当的。我刚刚编辑了标题。现在好点了吗?我仍然认为(您的社区似乎也是如此)您的答案最相关。
狮子座

1
我对您的问题进行了编辑以澄清问题,使两个问题(防止某些内容存储在历史记录中以及使用grep从stdin中读取)均可用。这样,所有答案仍然有效,但是完全不同的解决方案不会造成混淆。

5

为了完整起见,我在体内回答了以下问题:如何使grep从stdin读取模式:

您可以使用以下-f选项:

grep -f- /path/to/file

它将从中读取任意数量的模式stdin,每行一个。(-意味着stdin;您还可以指定一个带有模式的文件,每行一个。)grep将匹配/path/to/file其中匹配任何指定模式的行。


感谢那。这是一个很好的贡献,也是在其他地方使用的便捷技巧,例如,当需要ored模式时
Leo

2

这是我能想到的最好的方法:

grep $(read -p "Pattern: "; echo $REPLY) .*

这样够安全吗?除了滚动终端以外,是否还有其他方法可以恢复模式?有更好的方法吗?


3
您可以read -s用来防止回声(另请参见此问题)。秘密将在ps输出中可见。您可以改用grep -f /dev/stdin *(或grep -f - *),以便grep改为从文件中读取模式,用^D或结束输入:(read -es; echo $REPLY) | grep -f - *
mr.spuratic

1
捕获外壳应在其周围加上双引号。目前,如果用户输入空格或某些特殊字符,则此操作将中断。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.