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.
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
Dazu gibt es zwei Teile:
bash
speichert den Verlauf in einer Datei ~/.bash_history
, in die standardmäßig am Ende der Sitzung geschrieben wirdhistory
, die sich im Speicher befindetUm 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
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.
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
$
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.
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.
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
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!).
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 .