Bashレコードから単一パラメータを隠す

Bashレコードから単一パラメータを隠す

端末に渡された個々のパラメータを非表示にしながら、まだパラメータをコマンドに渡す方法はありますか?

この問題シェルを介してプレーンテキストパスワードを渡すときに発生する問題を修正しました。

ただし、パスワードでなくても、LDAPで使用可能な個人情報(パスワードを除く)を含む、オプションのパラメータがCLI履歴から非表示になることがあります。

それで、次のようなものはありますか?

注文する:

program argument1 argument2 {{argument3}} argument4

歴史:

program argument1 argument2 {{}} argument4

...それでargument3に渡されますが、BASH履歴にはprogram表示されますか?{{}}

つまり、インライン編集用に特定のパラメータを表示できますか?

これができない場合は、RFCなぜできないのですか?

答え1

Bashには個々のコマンドライン引数を隠す機能がないと思います。これはかなり狭いように見え、ほとんどすべての特殊文字がすでにいくつかの用途(シェルまたはシェルで実行されているツールで)を持っていることを考慮すると、その構文を選択することは困難です。

しかし、Bashには、空白で始まるコマンド全体を履歴から完全に除外する機能があります。まさにあなたが要求するものではありませんが、少なくともスペースを入力する方が簡単です。HISTCONTROL=ignorespace設定で有効にするかHISTCONTROL=ignoreboth。 (私が使用するほとんどのシステムではこの機能が有効になっているようですが、通常はデフォルトで有効にignorebothなっているかどうかはわかりません。)

または、より一般的な除外メカニズムを使用してHISTIGNORE=" *"エミュレートするように設定ignorespaceしたり、スペースに関係なく除外するために使用する特定のコマンドに一致するいくつかのパターンを思い出すこともできます。


つまり、コマンドライン引数で機密データを渡す傾向がある場合は、コマンド履歴をファイル(unset HISTFILE)に保存しないことをお勧めします。そうしないと、コマンド/引数を除外することを忘れてしまう危険があります。さらに、実行中のプロセスのコマンドラインは通常、システムのすべてのユーザーに表示されます。これはもちろん問題を制限する他の方法がありますが、パスワード以外の他の機密データでも同様に問題になります。

答え2

Bashでは設定します。

HISTIGNORE="*commandhere*"

たとえば、以下はfortune履歴から除外されますが、保存されますfortune -l

HISTIGNORE="*secret.server.com*:ytalk*:fortune"

源泉

関連情報