Jak zapobiec przechowywaniu hasła lub innych poufnych informacji w historii bash podczas korzystania z grep?


21

Ostatnio musiałem grepować za hasłem, które mogło zostać zapisane w pliku. Nie chciałem, aby ten wiersz pojawiał się w historii bash.

Jak mogę zapobiec przechowywaniu hasła lub innych poufnych informacji w historii bash podczas korzystania z grep? Na przykład, jak mogę uzyskać grep, aby odczytał wzór ze standardowego wejścia lub konsoli?

Odpowiedzi:


37

Jeśli wstawisz HISTCONTROL=ignorespace.bashrc i umieścisz spację przed nazwą polecenia, nie zostanie ona dodana do twojej historii.

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

3
FWIW: Pytanie w tytule i pytanie w ciele są zupełnie inne. Odpowiedziałem na pytanie w tytule.

Twoja krytyka jest słuszna. Właśnie zredagowałem tytuł. Czy teraz jest lepiej? Nadal uważam (i wydaje się, że społeczność), że twoja odpowiedź jest najbardziej istotna.
Leo

1
Zmodyfikowałem twoje pytanie, aby wyjaśnić różne rzeczy, udostępniając oba pytania (zapobiegając przechowywaniu czegoś w historii i czytając standardowe wejście z grep). W ten sposób wszystkie odpowiedzi są nadal aktualne, ale bardzo różne rozwiązania nie będą mylące.

5

Dla kompletności odpowiadam na pytanie w ciele: jak zmusić grepa do odczytania wzorców ze standardowego wejścia:

Możesz użyć -fopcji:

grep -f- /path/to/file

Odczyta dowolną liczbę wzorów stdin, po jednym w wierszu. ( -oznacza stdin; możesz także określić plik ze wzorami, po jednym w wierszu.) grepdopasuje linie, w /path/to/filektórych pasuje dowolny z określonych wzorców.


Dziękuję za to. Jest to dobry wkład i przydatna sztuczka, której można także użyć w innym miejscu, powiedz, kiedy potrzebny jest wzór or'ed
Leo

2

To najlepsze, co mogłem wymyślić:

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

Czy to jest wystarczająco bezpieczne? Czy istnieje sposób na odzyskanie wzorca innego niż przewijanie terminala? Czy jest lepszy sposób?


3
Możesz użyć, read -saby zapobiec echu (zobacz także to pytanie ). Sekret będzie widoczny na pswyjściu. Można użyć zamiast grep -f /dev/stdin *(lub grep -f - *), aby grep odczyta wzór (ów) z pliku zamiast wejście końcowemu ^D, czyli(read -es; echo $REPLY) | grep -f - *
mr.spuratic

1
Powłoka przechwytująca powinna mieć wokół siebie podwójne cudzysłowy. W tej chwili przestanie to działać, jeśli użytkownik wprowadzi spacje lub niektóre znaki specjalne.
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.