Come impedire che una password o altre informazioni sensibili vengano archiviate nella cronologia di bash quando si utilizza grep?


21

Di recente ho dovuto chiamare grep per una password che potrebbe essere stata salvata in un file. Non volevo che quella linea venisse visualizzata nella storia di Bash.

Come posso evitare che una password o altre informazioni sensibili vengano archiviate nella cronologia di bash quando utilizzo grep? Ad esempio, come posso ottenere grep per leggere lo schema da stdin o console?

Risposte:


37

Se inserisci il HISTCONTROL=ignorespacetuo .bashrc e metti uno spazio prima del nome del comando, non verrà aggiunto alla tua cronologia.

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

3
FWIW: La domanda nel titolo e la domanda nel corpo sono completamente diverse. Ho risposto alla domanda nel titolo.

Le tue critiche sono appropriate. Ho appena modificato il titolo. Va meglio adesso? Continuo a pensare (e così sembra alla comunità) che la tua risposta sia la più pertinente.
Leo,

1
Ho apportato una modifica alla tua domanda per chiarire le cose, rendendo disponibili entrambe le domande (impedendo che qualcosa venga archiviato nella storia e leggendo da stdin con grep). In questo modo, tutte le risposte sono ancora valide, ma le soluzioni molto diverse non saranno confuse.

5

Solo per completezza, rispondo alla domanda nel corpo: come ottenere grep per leggere schemi da stdin:

Puoi usare l' -fopzione:

grep -f- /path/to/file

Questo leggerà un numero qualsiasi di modelli stdin, uno per riga. ( -significa stdin; puoi anche specificare un file con motivi, uno per riga.) grepabbinerà le linee in /path/to/filecui corrispondono uno dei motivi specificati.


Grazie per quello Questo è un buon contributo e un trucco utile da usare anche altrove, ad esempio quando è necessario un modello or'ed
Leo

2

Questo è il meglio che ho potuto inventare:

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

È abbastanza sicuro? Esiste un modo per ripristinare il modello diverso dallo scorrimento del terminale? C'è un modo migliore?


3
Puoi usare read -sper prevenire l'eco (vedi anche questa domanda ). Il segreto sarà comunque visibile psnell'output. Puoi usare invece grep -f /dev/stdin *(o grep -f - *) in modo che grep legga invece i pattern da un file, termina l'input con ^D, o:(read -es; echo $REPLY) | grep -f - *
mr.spuratic

1
La shell di acquisizione dovrebbe avere tra virgolette doppie. Al momento, questo si interromperà se l'utente inserisce spazi o caratteri speciali.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.