web-dev-qa-db-ja.com

bashスクリプトにパスワードを要求させる方法は?

パスワードでプログラムの実行を保護したい。

Bashでそれを行うにはどうすればよいですか?

44
Debugger
stty_orig=$(stty -g) # save original terminal setting.
stty -echo           # turn-off echoing.
IFS= read -r passwd  # read the password
stty "$stty_orig"    # restore terminal setting.
52
codaddict

このコマンドは、stdinからvar pwdを読み取ります(エコーは無効になっています)。

IFS= read -s  -p Password: pwd

IFSの設定を解除すると、パスワードの先頭と末尾の空白が許可されます(一部の環境ではサポートされている可能性があるため、スクリプトによるユーザー資格情報の入力時にサポートするのが最善です)。

先頭/末尾の空白が適切に処理されていることを検証するには、次を使用できます。

echo -n "$pwd" | hexdump -C

注:コンソールにダンプするため、実際のパスワードでは使用しないでください!

HT:IFSの設定解除に関するこの追加情報については、Ron DuPlain氏。

77
Jürgen Hötzel

プログラムにパラメーターとして提供するためにパスワードを取得する必要がある場合は、エコーをオフにするだけのユニコーンアドバイスが適しています。
スクリプトでpasswdチェックを実行しても機能しません-ユーザーがbashスクリプトを実行できる場合、ユーザーはそれを読み取り、passwdを表示する権限も持っています。

Passwdを持つユーザーのみにプログラムの実行を許可する場合、安全な方法は、プログラムを所有する新しいユーザーアカウントを作成し、「Sudo」を使用してそのユーザーとしてプログラムを実行するスクリプトを作成することです。ユーザーは安全な方法でpasswdを使用します。

4
Martin Beckett