Как предотвратить сохранение пароля или другой конфиденциальной информации в истории Bash при использовании grep?


21

Недавно мне пришлось поискать пароль, который, возможно, был сохранен в файле. Я не хотел, чтобы эта строка появлялась в истории bash.

Как я могу предотвратить сохранение пароля или другой конфиденциальной информации в истории Bash при использовании grep? Например, как я могу получить grep для чтения шаблона из стандартного ввода или консоли?

Ответы:


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
Я внес изменения в ваш вопрос, чтобы прояснить ситуацию, сделав доступными оба вопроса (не допустить сохранения чего-либо в истории и чтения из stdin с помощью grep). Таким образом, все ответы остаются в силе, но совершенно разные решения не будут сбивать с толку.

5

Просто для полноты я отвечаю на вопрос в теле: как заставить grep читать шаблоны из stdin:

Вы можете использовать -fопцию:

grep -f- /path/to/file

Это будет читать любое количество шаблонов stdin, по одному в строке. ( -означает stdin; вы также можете указать файл с шаблонами, по одному на строку.) grepбудет совпадать со строками, в /path/to/fileкоторых совпадает любой из указанных шаблонов.


Спасибо за это. Это хороший вклад и удобный трюк, который можно использовать и в других местах, например, когда нужен шаблон or'ed
Лев

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
Оболочка захвата должна иметь двойные кавычки вокруг нее. На данный момент, это сломается, если пользователь введет пробелы или некоторые специальные символы.
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.