Bagaimana mencegah kata sandi atau informasi sensitif lainnya disimpan dalam bash history ketika menggunakan grep?

21

Baru-baru ini saya harus mencari kata sandi yang mungkin telah disimpan dalam file. Saya tidak ingin baris itu muncul di bash history.

Bagaimana saya bisa mencegah kata sandi atau informasi sensitif lainnya tidak disimpan dalam bash history ketika menggunakan grep? Sebagai contoh, bagaimana saya bisa mendapatkan grep untuk membaca pola dari stdin atau konsol?

Leo
sumber

Jawaban:

37

Jika Anda memasukkan HISTCONTROL=ignorespace.bashrc Anda, dan Anda memberi spasi sebelum nama perintah, itu tidak akan ditambahkan ke riwayat Anda.

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

sumber
3
FWIW: Pertanyaan dalam judul dan pertanyaan dalam tubuh sama sekali berbeda. Saya menjawab pertanyaan dalam judul.
Kritik Anda pantas. Saya baru saja mengedit judul. Apakah sekarang lebih baik? Saya masih berpikir (dan begitulah tampaknya masyarakat) bahwa jawaban Anda adalah yang paling relevan.
Leo
1
Saya mengedit pertanyaan Anda untuk mengklarifikasi hal-hal, membuat kedua pertanyaan (mencegah sesuatu dari disimpan dalam sejarah dan membaca dari stdin dengan grep) tersedia. Dengan cara ini, semua jawaban masih valid, tetapi solusi yang sangat berbeda tidak akan membingungkan.
5

Hanya untuk kelengkapan, saya menjawab pertanyaan dalam tubuh: bagaimana mendapatkan grep untuk membaca pola dari stdin:

Anda dapat menggunakan -fopsi:

grep -f- /path/to/file

Itu akan membaca sejumlah pola dari stdin, satu per baris. ( -berarti stdin; Anda juga dapat menentukan file dengan pola, satu file per baris.) grepakan cocok dengan baris /path/to/fileyang cocok dengan salah satu pola yang ditentukan.

Rici
sumber
Terima kasih untuk itu. Itu adalah kontribusi yang baik dan trik yang berguna untuk digunakan di tempat lain juga, katakanlah ketika pola or'ed diperlukan
Leo
2

Ini yang terbaik yang bisa saya pikirkan:

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

Apakah ini cukup aman? Apakah ada cara untuk memulihkan pola selain menggulir terminal? Apakah ada cara yang lebih baik?

Leo
sumber
3
Anda dapat menggunakan read -suntuk mencegah gema (lihat juga pertanyaan ini ). Rahasianya akan terlihat di pskeluaran. Anda dapat menggunakan sebagai gantinya grep -f /dev/stdin *(atau grep -f - *) sehingga grep akan membaca pola dari file sebagai gantinya, akhiri input dengan ^D, atau:(read -es; echo $REPLY) | grep -f - *
mr.spuratic
1
Shell penangkap harus memiliki tanda kutip ganda di sekitarnya. Saat ini, ini akan pecah jika pengguna memasukkan spasi atau beberapa karakter khusus.