Wie eröffne ich eine Inkognito-Bash-Sitzung?

50

Ist es möglich, eine Inkognito-Sitzung zu eröffnen bash?

Zum Beispiel, wenn wir Passwörter in Befehle eingeben müssen und sie nicht bashzum Verlauf hinzufügen möchten .

Sudoer
quelle
9
cat | bashführt eine nicht interaktive bashBearbeitung ohne Eingabeaufforderung, Befehlszeilenbearbeitung (nur der interne Editor der Zeilendisziplin) oder Verlauf aus.
Stéphane Chazelas
Schreiben Sie ein Leerzeichen vor Ihren Befehl: 'secretcommand'. Jetzt secrectcommandwird nicht in der Bash-Geschichte sein.
Martin Thoma

Antworten:

79

Wenn Sie die bashProtokollierung Ihrer Befehle beenden möchten , deaktivieren Sie einfach die HISTFILEVariable:

HISTFILE=

Alle weiteren Befehle sollten dann nicht mehr angemeldet sein .bash_history.

Wenn Sie andererseits tatsächlich Kennwörter als Argumente für Befehle angeben, tun Sie bereits etwas Falsches. .bash_historyist nicht für die ganze Welt lesbar und daher nicht die größte Bedrohung in dieser Situation:

psund /procsind das große problem. Alle Benutzer im System können die Befehle, die Sie gerade ausführen, mit allen ihren Argumenten anzeigen . Das Übergeben von Kennwörtern als Befehlszeilenargumente ist daher von Natur aus unsicher . Verwenden Sie Umgebungsvariablen oder Konfigurationsdateien (die Sie mit 600 geändert haben), um Kennwörter sicher bereitzustellen.

Martin von Wittich
quelle
5
Ich benutze Linux seit über 10 Jahren und hätte nie gedacht, dies zu tun +1
eyoung100
3
unset HISTFILEhat einen ähnlichen Effekt. Ich habe eine Funktion dafür: n() { HISTFILE=; PS1="~${PS1#\~}"; }. Auf diese Weise kann ich klar erkennen, ob ich mich im "Inkognito-Modus" befinde oder nicht.
Lekensteyn
13
+1 für die Lösung des eigentlichen Problems, anstatt nur die Frage zu beantworten. Eine zusätzliche Option zum Weitergeben von Anmeldeinformationen sind Unix-Domain-Sockets.
Nathan Osman
1
Ein weiterer nützlicher Tipp wäre, ein Leerzeichen vor "HISTFILE =" einzufügen. Ein Befehl mit vorherigem Leerzeichen wird nicht protokolliert.
FUD
Eine andere coole Sache dabei ist, dass auch frühere Befehle in diesem Fenster ignoriert werden. Es ist, als würde man eine bestehende Sitzung inkognito machen: p
Uzumaki D. Ichigo
37
HISTCONTROL=ignorespace

Wenn diese Option nicht bereits aktiviert ist bash, ist sie möglicherweise genau das, was Sie benötigen. Es ist weniger schwächend als das Deaktivieren der gesamten Historie. Mit dieser Einstellung wird keine Befehlszeile, die mit einem Leerzeichen beginnt, in der Verlaufsliste gespeichert.

Von diesen verwandten Links:

Warum hat bash die Option HISTCONTROL = ignorespace?

Warum speichert bash keine Befehle, die mit Leerzeichen beginnen?

Timothy Martin
quelle
6
Beachten Sie, dass dies häufig die Standardeinstellung ist.
Ángel
3

Sie können den Verlauf vorübergehend deaktivieren: set +o history

set +o history
...
set -o history

Es gibt einen Unterschied zwischen dem Deaktivieren des Verlaufs und dem Deaktivieren HISTFILE:

HISTFILE=
date
ls
HISTFILE=~/.bash_history
history

gibt so etwas aus:

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

dh alle Befehle werden in der Verlaufsliste gespeichert. Tippe exit, um es zu speichern.
Aber

set +o history
date
ls
set -o history
history

gibt so etwas aus:

115  set +o history
116  history

Zusammenfassung :
set +o historyfür lange Sitzungen.
HISTCONTROLund <space>commandzu anderer Zeit.

Evgeny Vereshchagin
quelle