「watch」コマンドでパスワードをマスクする方法は?

「watch」コマンドでパスワードをマスクする方法は?

私はwatchこれをMySQLレプリケーションスレーブの進行状況を監視するために使用しています。今設定したように、パスワードが出力watchヘッダーに表示されます。誰かが私のパスワードを盗んでいくかとは心配しませんが、原則として私の肩越しに近づいて垣間見る人に私のパスワードを知らせたくありません。

現在使用しているコマンドラインはwatch次のとおりです。

watch -n1 -d mysql -pmypass -e "'show slave status\G'"

mysql小さなシェルスクリプトからコマンドを隠す必要がありますか?

答え1

コマンドラインでパスワードを提供するよりも優れたオプションは、~/.my.cnf資格情報を含むファイルを作成することです。

[client]
password=something

これにより、誰も出力psやシェルの履歴を見ることができなくなります。

つまり、次のようにwatchヘッダーを完全にドラッグできます。-tまたは--no-titleオプション、こうなります:

間隔、コマンド、および現在時刻のタイトルと、その後に空白行が表示されるディスプレイの上部を閉じます。

あなたが望むよりも多くの情報を失うことになりますが、これはそれほど重要ではありません。それ以外の場合は、提案されているようにシェルスクリプトも機能します。

答え2

画面にのみ表示されるのではなく、ps出力、~/.bash_history(出力はユーザーと管理者のみが読むことができる必要があります)、一部の監査またはパフォーマンスログにも表示されます。

コマンドの引数としてパスワードを渡さないでください。コマンドのパラメータは公開された知識と見なされるべきです。

mysqlの場合は、~/.my.cnf次のように使用します。マイケルが見せたまたは、他のファイル(それ自体でのみ読み取ることができます)から次のように渡します。--defaults-extra-file=the-file

答え3

実行時にパスワードを入力できますか?端末に表示したり、履歴に保存することなく、bashスクリプトから読み取ることができます。

#!/bin/bash

if ! IFS= read -rs -p "Enter password: " password < /dev/tty 2> /dev/tty
then
  echo "Password entry failed"
  exit 1
fi

somecommand -user me -password $password

他の答えを読んだ。はいpsただし、この問題はプロセスがあるため影響を受けやすいです。somecommand

関連情報