Comment empêcher un mot de passe ou d'autres informations sensibles d'être stockés dans l'historique bash lors de l'utilisation de grep?

21

J'ai récemment dû chercher un mot de passe qui aurait pu être enregistré dans un fichier. Je ne voulais pas que cette ligne apparaisse dans l'histoire de bash.

Comment puis-je empêcher un mot de passe ou d'autres informations sensibles d'être stockés dans l'historique bash lors de l'utilisation de grep? Par exemple, comment puis-je demander à grep de lire le modèle depuis stdin ou la console?

Leo
la source

Réponses:

37

Si vous mettez HISTCONTROL=ignorespacevotre .bashrc, et vous mettez un espace avant le nom de la commande, il ne sera pas ajouté à votre historique.

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

la source
3
FWIW: La question dans le titre et la question dans le corps sont complètement différentes. J'ai répondu à la question dans le titre.
Votre critique est appropriée. Je viens d'éditer le titre. Est-ce mieux maintenant? Je pense toujours (et il semble que la communauté le fasse) que votre réponse est la plus pertinente.
Leo
1
J'ai apporté une modification à votre question pour clarifier les choses, rendant les deux questions (empêchant quelque chose d'être stocké dans l'historique et lues depuis stdin avec grep) disponibles. De cette façon, toutes les réponses sont toujours valables, mais les solutions très différentes ne seront pas déroutantes.
5

Juste pour être complet, je réponds à la question dans le corps: comment obtenir grep pour lire les modèles de stdin:

Vous pouvez utiliser l' -foption:

grep -f- /path/to/file

Cela lira n'importe quel nombre de modèles stdin, un par ligne. ( -signifie stdin; vous pouvez également spécifier un fichier avec des modèles, un par ligne.) grepcorrespondra aux lignes /path/to/filecorrespondant à l'un des modèles spécifiés.

rici
la source
Merci pour ça. C'est une bonne contribution et une astuce pratique à utiliser ailleurs également, par exemple lorsqu'un modèle or'ed est nécessaire
Leo
2

C'est le mieux que j'ai pu trouver:

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

Est-ce assez sûr? Existe-t-il de toute façon pour récupérer le motif autre que le défilement du terminal? Y a-t-il une meilleure façon?

Leo
la source
3
Vous pouvez utiliser read -spour éviter l'écho (voir aussi cette question ). Le secret sera cependant visible en pssortie. Vous pouvez utiliser à la place grep -f /dev/stdin *(ou grep -f - *) pour que grep lise le (s) modèle (s) d'un fichier à la place, ^D(read -es; echo $REPLY) | grep -f - *
terminez l'
1
Le shell de capture doit être entouré de guillemets doubles. Pour le moment, cela se cassera si l'utilisateur entre des espaces ou des caractères spéciaux.