シークレットbashセッションを開くにはどうすればよいですか?


50

でシークレットセッションを開くことはできbashますか?

たとえば、コマンドにパスワードを入力する必要がありbash、それらを履歴に追加したくない場合。


9
cat | bashbashプロンプト、コマンドライン編集(ラインディシプリンの内部エディターのみ)、または履歴なしで非対話型を実行します。
ステファンシャゼル14年

コマンドの前にスペースを書きます: 'secretcommand'。現在secrectcommand、bashの履歴にはありません。
マーティントーマ14年

回答:


79

bashコマンドのロギングを停止する場合は、HISTFILE変数の設定を解除します。

HISTFILE=

これ以降のコマンドはすべてに記録されなくなります.bash_history

一方、実際にコマンドの引数としてパスワードを提供している場合は、すでに何か間違ったことをしていることになります。.bash_history誰にも読めないため、この状況では最大の脅威ではありません。

psそして/proc大きな問題です。システムのすべてのユーザーは、現在実行中のコマンドとその引数をすべて見ることができます。したがって、コマンドライン引数としてパスワードを渡すことは本質的に安全ではありません。環境変数または構成ファイル(chmodded 600を使用)を使用して、パスワードを安全に提供します。


5
私は10年以上Linuxを使用してきましたが、これを行うとは考えていませんでした+1
eyoung100 14年

3
unset HISTFILE同様の効果があります。この機能があります:n() { HISTFILE=; PS1="~${PS1#\~}"; }。そうすれば、「シークレットモード」であるかどうかを明確に確認できます。
Lekensteyn

13
+1質問に答えるだけでなく、実際の問題に対処するため。資格情報を渡すための追加オプションは、Unixドメインソケットです。
ネイサンオスマン14年

1
別の便利なヒントは、「HISTFILE =」の前にスペースを置くことです。前にスペースがあるコマンドはログに記録されません。
FUD

これに関するもう1つの素晴らしい点は、そのウィンドウの以前のコマンドも無視されることです。P:それはお忍びに既存のセッションを回すようなものです
うずまきD.いちご

37
HISTCONTROL=ignorespace

このオプションがまだに設定されていない場合はbash、まさに必要なものである可能性があります。すべての履歴を無効にするよりも消耗度が低くなります。そのセットでは、スペース文字で始まるコマンドラインは履歴リストに保存されません。

これらの関連リンクから:

bashにHISTCONTROL = ignorespaceオプションがあるのはなぜですか?

bashがスペースで始まるコマンドを保存しないのはなぜですか?


6
多くの場合、これがデフォルトです。
アンヘル14年

3

履歴を一時的に無効にできます: set +o history

set +o history
...
set -o history

履歴の無効化と設定解除には違いがありますHISTFILE

HISTFILE=
date
ls
HISTFILE=~/.bash_history
history

このようなものを出力します:

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

すなわち、すべてのコマンドは履歴リストに保存されます。入力exitして保存します。
しかし

set +o history
date
ls
set -o history
history

このようなものを出力します:

115  set +o history
116  history

要約
set +o history長いセッション用。
HISTCONTROLそして<space>command他の時。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.