it-swarm.com.de

Ich habe versehentlich ein Passwort in die Bash-Befehlszeile eingegeben

Ich habe versehentlich mein Passwort in die Bash-Befehlszeile eingegeben und die Zeile Last login: ... mit Wrong password verwechselt (ich hatte es eilig). Was mache ich, um meine Spur abzudecken?

Ich habe .bash_history bearbeitet und die fehlerhafte Zeile gelöscht (musste mich einmal neu anmelden, damit das Kennwort in der Datei angezeigt wurde, damit ich es löschen konnte, und mich erneut neu anmelden, damit es aus dem unter UPARROW-Taste verfügbaren Verlauf verschwindet).

Gibt es einen anderen Ort, an dem der Befehlsverlauf gespeichert werden könnte? Das System ist CentOS 6.5.

186
MaDa

Sie können nur die fehlerhafte Zeile aus dem Verlauf von bash entfernen, anstatt den gesamten Verlauf zu löschen. Entfernen Sie einfach die Zeile mit dem Flag -d und speichern (schreiben) Sie den neuen Verlauf mit dem Flag -w:

$ history
351 ssh [email protected]
352 my_password
$ history -d 352
$ history -w
183
dotancohen

Dazu gibt es zwei Teile:

  • bash speichert den Verlauf in einer Datei ~/.bash_history, in die standardmäßig am Ende der Sitzung geschrieben wird
  • die history, die sich im Speicher befindet

Um sicherzugehen, müssen Sie es aus der Sitzung löschen:

history -c

und kürzen Sie die Verlaufsdatei nach Bedarf:

> ~/.bash_history

Wenn Ihre Sitzung, in der Sie das Kennwort eingegeben haben, noch geöffnet ist, können Sie cover your trace auch so einstellen, dass die Variable HISTFILE beim Beenden der Sitzung nicht in ~/.bash_history geschrieben wird:

export HISTFILE=/dev/null
121
devnull

Da bash (zumindest alle mir bekannten früheren und aktuellen Versionen) den Verlauf nicht automatisch speichert, bis Sie das Programm beenden, sollten Sie nach Eingabe eines Befehls, der niemals gespeichert werden soll, sofort Folgendes eingeben:

kill -9 $$

Dadurch wird die Shell mit SIGKILL beendet, die nicht abgefangen werden kann, sodass die Shell beim Beenden keine Möglichkeit hat, etwas zu speichern.

Bei den meisten anderen Ansätzen wird nachträglich gescrubbt (d. H. Nachdem die Daten bereits auf der Festplatte abgelegt wurden), was die Wahrscheinlichkeit von Fehlern (Fehlen einer Kopie) erheblich erhöht, insbesondere wenn das System möglicherweise btrfs oder ähnliches verwendet.

23
R..

Mein Lieblingstrick besteht darin, den Aufwärtspfeil zu drücken, die Rücktaste über dem Befehl zu drücken, etwas einzugeben (möglicherweise nicht erforderlich), den Abwärtspfeil zu drücken, "ls" einzugeben und die Eingabetaste zu drücken. Fühlt sich wirklich hokey an, aber es funktioniert tatsächlich. Das habe ich herausgefunden, als ich mich darüber geärgert habe, dass ich den falschen Befehl in meinem Verlauf bearbeitet und ihn dann ruiniert habe, indem ich nicht die Tastenkombination Strg-C gedrückt habe, um die Bearbeitung abzubrechen. Ich denke, Bash unterstützt die revisionistische Geschichte. ;-)

$ passw0rd
$ <up arrow><backspace x8>cd<down arrow>echo hi
$ history|tail -3

Sieht aus wie:

$ passw0rd
passw0rd: command not found
$ echo hi
hi
$ history|tail -3
 2445* cd
 2446  echo hi
 2447  history|tail -3
$ 
11
Mark Jerde

Nachdem Sie versehentlich etwas eingegeben haben, das nicht im Verlauf gespeichert werden soll, können Sie Folgendes eingeben: unset HISTFILE

Bash weiß nicht, wo der Verlauf gespeichert werden soll, wenn Sie sich abmelden. Auf diese Weise wird die Verlaufsprotokollierung für die gesamte Sitzung deaktiviert.

11
mtak

Zusätzlich zu den anderen Antworten kann es relevant sein, dass das Kennwort jetzt auch im Bildlaufpuffer des Terminals - der Historie des angezeigten Texts - und, was eher ein Problem ist, möglicherweise auf der Festplatte gefunden wird, wenn der Terminalemulator das gespeichert hat Geschichte auf die Festplatte. Dies geschieht in KDE-Konsolen, wenn die Verlaufsgröße auf "unbegrenztes Zurückscrollen" eingestellt ist, um keine Ausgabe zu verwerfen.

10
Volker Siegel

Mit $<space> command wird ein Befehl nicht zum Verlauf hinzugefügt, was manchmal nützlich ist

$  history | grep mywierdgrep
$ history | grep mywierdgrep
 2005  history | grep mywierdgrep
5
jris198944

Eine weitere Alternative, um das Speichern in der Verlaufsdatei zu vermeiden (bevor Sie sich abmelden), ist einfach chmod 444 ~/.bash_history und sich dann abzumelden. Melden Sie sich erneut an und setzen Sie die Berechtigungen zurück (oder nicht, je nachdem, wie paranoid Sie sind!).

4
Adam

Ich sehe immer wieder erwähnt

Beachten Sie, dass dies nicht funktioniert, wenn Sie "Prompt_COMMAND = history -a" [..] festgelegt haben. Sie müssen Ihre .bash_history bearbeiten, um sie zu entfernen.

Der erste Teil ist definitiv wahr, aber Sie müssen nicht manuell .bash_history bearbeiten, um es zu beheben. Wenn Sie die beiden Befehle in einer Zeile kombinieren, funktioniert dies einwandfrei:

$ history
351 ssh [email protected]
352 my_password
$ history -d 352 ; history -w

Viele der Antworten hier versuchen, den fraglichen Befehl aus dem Verlauf der aktuellen Bash-Sitzung zu entfernen, bevor er in $HISTFILE geschrieben wird (standardmäßig ~/.bash_history). Wenn Sie jedoch Prompt_COMMAND=history -a festgelegt haben, wird der Befehl mit Ihrem Kennwort sofort in Ihren $HISTFILE geschrieben, wenn die Eingabeaufforderung nach Beendigung des Befehls angezeigt wird. Sie müssen Ihren $HISTFILE bearbeiten, um ihn zu entfernen.

Diese Einstellung wird häufig verwendet, um Befehle aus mehreren offenen Bash-Sitzungen zu verschachteln .

0
benrifkah