Comment ouvrir une session de bash incognito?

50

Est-il possible d'ouvrir une session incognito bash?

Par exemple, lorsque nous devons entrer des mots de passe dans des commandes et que nous ne voulons bashpas les ajouter à l'historique.

Sudoer
la source
9
cat | bashexécutera un programme non interactif bashsans invite, édition en ligne de commande (uniquement l'éditeur interne de la discipline de ligne) ni historique.
Stéphane Chazelas
Ecrivez un espace devant votre commande: 'commande secrète'. Maintenant secrectcommand, ne sera pas dans l'histoire de bash.
Martin Thoma

Réponses:

79

Lorsque vous souhaitez basharrêter de consigner vos commandes, désélectionnez simplement la HISTFILEvariable:

HISTFILE=

Toutes les commandes ultérieures ne doivent alors plus être enregistrées .bash_history.

D'autre part, si vous fournissez des mots de passe comme arguments à des commandes, vous faites déjà quelque chose de mal. .bash_historyn'est pas lisible par le monde et n'est donc pas la plus grande menace dans cette situation:

pset /procsont le gros problème. Tous les utilisateurs du système peuvent voir les commandes que vous exécutez actuellement avec tous leurs arguments . Passer des mots de passe en tant qu'arguments de ligne de commande est donc intrinsèquement peu sécurisé . Utilisez des variables d’environnement ou des fichiers de configuration (que vous avez chmodded 600) pour fournir des mots de passe en toute sécurité.

Martin von Wittich
la source
5
J'utilise Linux depuis plus de 10 ans et je n'ai jamais pensé faire cela +1
eyoung100
3
unset HISTFILEa un effet similaire. J'ai une fonction pour cela: n() { HISTFILE=; PS1="~${PS1#\~}"; }. De cette façon, je peux voir clairement si je suis en "mode incognito" ou non.
Lekensteyn
13
+1 pour aborder le vrai problème plutôt que de simplement répondre à la question. Les sockets de domaine Unix constituent une autre option permettant de transmettre les informations d'identification.
Nathan Osman
1
Une autre astuce utile serait de mettre un espace avant c.-à-d. "HISTFILE =". toute commande avec un espace avant ne soit pas enregistrée.
FUD
Une autre chose intéressante à ce sujet est que même les commandes précédentes de cette fenêtre sont également ignorées. C'est comme si on convertissait la session existante en incognito: p
Uzumaki D. Ichigo
37
HISTCONTROL=ignorespace

Si cette option n’est pas déjà définie bash, c’est peut-être ce dont vous avez besoin. C'est moins débilitant que de désactiver toute l'histoire. Avec cet ensemble, toute ligne de commande commençant par un caractère d'espacement ne sera pas enregistrée dans la liste de l'historique.

À partir de ces liens connexes:

Pourquoi bash a-t-il une option HISTCONTROL = ignorespace?

Pourquoi bash ne stocke-t-il pas les commandes commençant par des espaces?

Timothy Martin
la source
6
Notez que c'est souvent la valeur par défaut.
Angel
3

Vous pouvez désactiver temporairement l'historique: set +o history

set +o history
...
set -o history

Il existe une différence entre la désactivation de l'historique et la désactivation HISTFILE:

HISTFILE=
date
ls
HISTFILE=~/.bash_history
history

génère quelque chose comme ceci:

84  HISTFILE=
85  date
87  ls
88  HISTFILE=~/.bash_history
89  history

c'est-à-dire que toutes les commandes sont enregistrées dans la liste de l'historique. Tapez exitpour le sauvegarder.
Mais

set +o history
date
ls
set -o history
history

génère quelque chose comme ceci:

115  set +o history
116  history

Résumé :
set +o historypour les longues sessions.
HISTCONTROLet <space>commandà un autre moment.

Evgeny Vereshchagin
la source