誤ってbashコマンドラインにパスワードを入力しました


189

誤ってパスワードをbashコマンドラインに入力して、そのLast login: ...ラインを間違えましたWrong password(急いでいた)。トレースをカバーするにはどうすればよいですか?

私がやったのは.bash_history、問題のある行を編集して削除することでした(一度再ログインしてファイルにパスワードが表示されるのを確認して削除し、再度再ログインしてUPARROWキーで利用可能な履歴から消えるようにしました)。

コマンド履歴を保存できる他の場所はありますか?システムはCentOS 6.5です。


59
パスワードを変更するだけです:)
gronostaj 14

96
パスワードの変更はそれほど簡単ではありません...新しい公開鍵を15の異なるサーバーに再インストールするよう管理者に依頼する必要があります/dev/null
MaDa 14

71
パスワードをいつでも簡単に変更できない場合は、深刻なセキュリティ抜け穴がある可能性があります。誰かが実際にパスワードを取得したらどうしますか?システムへのアクセスをすぐに取り消す方法はありますか?
グロノスタジ14

42
キーを変更せずに、sshキーのパスフレーズを変更できますssh-keygen -f id_rsa -p
-jwg

6
少なくともネットワーク化されたWindowsログインでは、あなたはうんざりしています。admin(高尚なサーバータワーの一部)では、デフォルトですべてのログイン試行が記録されます。もちろん、ユーザー名はクリアテキストです。進取の気性のある人がしなければならないことは、非ユーザー名に似た文字列を検索し、それらを次の有効なユーザー名(または同じマシンでの次のログイン試行)と関連付けることです。また、その管理ログファイルを削除する簡単な方法はありません。パスワードを変更する必要があります。
カールヴィットフト14

回答:


184

bash履歴全体を消去する代わりに、問題のある行のみを履歴から削除できます。-dフラグのある行を削除してから、フラグのある新しい履歴を保存(書き込み)し-wます。

$ history
351 ssh me@site.com
352 my_password
$ history -d 352
$ history -w

1
「PROMPT_COMMAND = history -a」を設定した場合、これは機能しないことに注意してください。これを設定すると、コマンドの終了後にプロンプ​​トが表示されたときに、パスワードを指定したコマンドがすぐに.bash_historyに書き込まれます。.bash_historyを編集して削除する必要があります。
ベンリフカ

1
また、行がhostoryファイルに書き込まれ、後で複数のシェル(ターミナルウィンドウ)が開かれた場合、それらのシェルはすべて履歴にあることに注意してください!これらのすべてのシェルから削除するか、少なくとも閉じた最後のシェルから削除する必要があります!それを使用したシェルが存在する前に取得する方が良い。複数のシェルを扱うときの歴史は悪夢になります。
アンソニー

121

これには2つの部分があります。

  • bash~/.bash_historyデフォルトで、セッションの終了時に書き込まれるファイルに履歴を保存します
  • historyメモリ内に保持されています

安全にするために、セッションからクリアする必要があります。

history -c

必要に応じて履歴ファイルを切り捨てます。

> ~/.bash_history

パスワードを入力したセッションがまだ開いている場合、トレースカバーする別の方法は、セッションを終了HISTFILEする~/.bash_historyときに履歴が書き込まれないように変数をヌルデバイスに設定することです。

export HISTFILE=/dev/null

205
ちょっと見て、それは管理者です!
Raystafarian

5
申し訳ありませんが、申し訳ありません:)コメントを書いていたとき、私はあなたのニックネームを見ていませんでした。
MaDa 14

7
妄想的である(そして何らかの理由でまだパスワードを変更しない)にはshred、ファイルを何度も上書きするべきではないでしょうか?
小次郎14

1
@MaDa問題ありません。私は答えに別の方法を追加して、私のニックネームを写真に入れました。
devnull

5
設定HISTFILE=で十分です。From bash(1)設定されていない場合、シェルの終了時にコマンド履歴は保存されません。
レーケンシュタイン14

23

bash(少なくとも私が知っているすべての歴史的および現在のバージョン)は、終了するまで履歴を自動的に保存しないため、保存しないようにしたいコマンドを入力したときに一般的に適用される戦略は、すぐに入力することです:

kill -9 $$

これにより、シェルはSIGKILLキャッチできずに終了します。そのため、シェルには終了時に何も保存する方法がありません。

他のほとんどのアプローチは、特にシステムがbtrfsなどを使用している可能性がある場合、事実の後(つまり、データが既にディスクにヒットした後)にスクラブを行います。


2
+1は、エラーだけではなくより多くのチャンスは、それが可能であってもどのように多くのコマンドが後にそれが実行された/場合によっては回復可能
たけた

「自動的に」という言葉がありませんか?dotancohenは、シェルを終了せずに履歴を保存する方法を示しているためです。
ベンフォイト14

3
シェルは、各コマンドの実行後、終了時ではなく履歴を保存するように構成できます。
ニックマッテオ14

1
+1これはまさに私がお勧めしたかったものです!加えてrm ~/.bash_history~、それはすでに保存されているとき、OPの場合のバックアップファイルを削除する
トマス・

「PROMPT_COMMAND = history -a」を設定した場合、これは機能しないことに注意してください。これを設定すると、コマンドの終了後にプロンプ​​トが表示されたときに、パスワードを指定したコマンドがすぐに.bash_historyに書き込まれます。.bash_historyを編集して削除する必要があります。
ベンリフカ

11

誤って履歴に保存したくないものを入力した後、次のように入力できます。 unset HISTFILE

Bashはログオフ時に履歴を保存する場所を認識しないため、事実上、セッション全体の履歴ログを無効にします。


「PROMPT_COMMAND = history -a」を設定した場合、これは機能しないことに注意してください。これを設定すると、コマンドの終了後にプロンプ​​トが表示されたときに、パスワードを指定したコマンドがすぐに.bash_historyに書き込まれます。.bash_historyを編集して削除する必要があります。
ベンリフカ

11

このための私のお気に入りのトリックは、上矢印を押し、コマンドの上でバックスペースを押し、何かを入力し(必要ではないかもしれません)、下矢印を押し、「ls」を入力して、Enterを押します。ほんとうに気分が悪いが、実際には機能している。これは、履歴内の間違ったコマンドを編集し、ctrl-cを押して編集を中止しないことでそのコマンドを台無しにした後にイライラしたときに発見されました。bashは修正主義の歴史をサポートしていると思います。;-)

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

次のようになります。

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

それは奇妙です。欠点の1つは、履歴を編集したことがわかっているように見えるため、古いバージョンを復元する方法があるのでしょうか?
MadTux 14

@MadTux-完全にですが、.bash_historyは単なるテキストファイルです。したがって、上記の例を実行し、終了して再接続できます。.bash_historyファイルのすべての内容を表示すると、「cd」を実行した場合と区別するものは何もないので、トレイルはきれいです。
マークジャーデ14

「PROMPT_COMMAND = history -a」を設定した場合、これは機能しないことに注意してください。これを設定すると、コマンドの終了後にプロンプ​​トが表示されたときに、パスワードを指定したコマンドがすぐに.bash_historyに書き込まれます。.bash_historyを編集して削除する必要があります。
ベンリフカ

10

他の答えに加えて、パスワードがターミナルスクロールバッファー(表示されたテキストの履歴)でも見つかることが関連している可能性があります。ディスクへの履歴。これは、履歴サイズが「無制限のスクロールバック」に設定されている場合、出力を破棄しないようにKDEコンソールで発生します。


6

では$<space> command、コマンドは時々 、履歴に追加されていない便利

$  history | grep mywierdgrep
$ history | grep mywierdgrep
 2005  history | grep mywierdgrep

2
興味深いものの、これが説明されているシナリオでどのように役立つかは明確ではありません。すべてのパスワードはスペースで始まることを提案していますか?
ベンフォイト14

1
いいえ、彼が提案しているのは、これを使用して、履歴にコミットしたくないタイプの行は、先頭にスペースを入れて入力する必要があるということです。例:「ls」は「ls」になり、その行は履歴またはセッションの上矢印リストに表示されません。
ブライアンC. 14

4
この先頭スペースのトリックは、$ HISTCONTROLにignorespaceが含まれている場合にのみ機能することに注意してください。
ベルントジェンドリセック14

2
@ jris198944コマンドライン引数を介してパスワードを提供すると、を実行するシステム上の誰にもパスワードが公開される可能性がありpsます。
ジェームズドリン14

2
とにかく、このトリックは前もって計画している場合に役立ちますが、これは誰かがコマンドラインで誤ってパスワードを入力した元のシナリオを助けません。
ジェームズドリン14

4

(ログアウトする前に)履歴ファイルへの保存を回避するもう1つの方法は、単に

chmod 400 ~/.bash_history 

その後ログアウトします。bashセッション全体が破棄され、以前の履歴が保持されるように、ファイルに書き込まれる履歴を停止します(ファイルは読み取り専用であるため)。

再度ログインし、権限をリセットします600(または、あなたがどれほど偏執的かによって異なります!)。


1

繰り返し言及されている

「PROMPT_COMMAND = history -a」を設定した場合、これは機能しないことに注意してください[..] .bash_historyを編集して削除する必要があります。

最初の部分は間違いなく真実ですが、それを修正するために手動で.bash_historyを編集する必要はありません。2つのコマンドを1行で組み合わせると、まったく問題なく動作します。

$ history
351 ssh me@site.com
352 my_password
$ history -d 352 ; history -w

この方法が正確に機能する理由を説明していただけますか?
カミルマシオロウスキ

PROMPT_COMMANDは、次のコマンドプロンプトを表示する前にのみ実行されます。別の行で-dおよび-wコマンドを入力する際の問題は、PROMPT_COMMANDがその間にhistory -aコマンドを実行することです。あなたは-dの両方を実行し、1つのコマンドラインで-w場合は、それだけで、後で実行
フロリスKruisselbrink

0

ここでの回答の多くは、問題のコマンドを、書き込み前に現在のbashセッションの履歴から削除しようと$HISTFILEします(デフォルトでは〜/ .bash_history)。ただし、PROMPT_COMMAND=history -a コマンドを設定した場合$HISTFILE、コマンドの終了後にプロンプ​​トが表示されると、パスワードがすぐに書き込まれます。を編集する$HISTFILEには削除する必要があります。

この設定は、複数のオープンbashセッションからのコマンドインターリーブするために一般的に使用されます


-3

syslogログも確認する必要があります。通常、無効なログインはsyslogに記録されます。

/ var / log / messagesまたはOSに相当するもの。


1
問題は、彼が間違ってパスワードを入力したことではなく、すでにログインしていて、プロンプトにパスワードを入力してEnterキーを押したことです。これは、メッセージファイルには表示されません。
MaQleod 14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.