HISTIGNOREを「sudo -S」に設定します
$ export HISTIGNORE='*sudo -S*'
次に、パスワードを安全にsudoに渡します。
$ echo "your_password" | sudo -S -k <command>
「履歴」は、このコマンドを履歴に保存しないことを意味します。これは、メモリまたは「〜/ .bash_history」ファイルの履歴です。
たとえば、以下は、パスワードの履歴を保持せずに、パスワードをsudoコマンドに安全にパイプします。
「-S」は、パスワードにstdinを使用することを意味し、
「-k」は、キャッシュされた資格情報を無視して、sudoに常に要求することを意味します。これは一貫した動作のためです。
$ export HISTIGNORE='*sudo -S*'
$ echo "<your_password>" | sudo -S -k whoami
$ echo "<your_password>" | sudo -S -k cat /etc/shadow
$ echo "<your_password>" | sudo -S -k bash /tmp/myscript.sh
上記の方法の欠点は、後で履歴で実行したコマンドを表示したい場合、それらが表示されないことです。別の方法は、sudo認証資格情報キャッシュを更新し(デフォルトでは5分のタイムアウトで有効になっています)、sudoを個別に実行します。ただし、これの欠点は、5分間のキャッシュに注意する必要があることです。
例えば:
$ export HISTIGNORE='*sudo -S*'
$ echo "<your_password>" | sudo -S -v
$ sudo whoami
$ echo "<your_password>" | sudo -S -v
$ sudo cat /etc/shadow
$ echo "<your_password>" | sudo -S -v
$ sudo /tmp/myscript.sh
注各コマンドの前にsudoを実行して、デフォルトが5分であるため、sudoキャッシュが更新されることを確認しました。はい、whoamiは5分はかからないはずですが、一貫性を保つために各コマンドの前に実行することも考えられます。「export HISTIGNORE =」sudo -Sと入力することもできます〜/ .bashrcファイルに「」を追加し、「。」でロードします。〜/ .bashrc "またはlogoff then login。ただし、スクリプトの目的でこれを使用することを考えているので、最高のセキュリティプラクティスのためにすべてのスクリプトの先頭に配置します。代わりに変数にsudo -S -v "を使用するのも良い考えです。ルート権限が必要な各コマンドの前に変数を実行します。Janarのコメントを参照してください。「John T」のコメントには「-k」パラメータも含める必要があります、「-k」なしで「sudo -S」を実行し、sudo認証キャッシュにすでに資格情報があり(まだ有効で、デフォルトのsudo認証キャッシュは5分)、bashはパスワードをコマンドとして実行します悪い。
halt
ルートとして実行する必要があります。