Как сделать bash script запросить пароль?

Я хочу защитить исполнение программы паролем.

Как это сделать в bash?

Ответ 1

stty_orig=`stty -g` # save original terminal setting.
stty -echo          # turn-off echoing.
read passwd         # read the password
stty $stty_orig     # restore terminal setting.

Ответ 2

Эта команда будет читать в var pwd из stdin (с отключенным эхом):

IFS= read -s  -p Password: pwd

Сброс IFS позволит использовать ведущие и завершающие пробелы в паролях (которые могут поддерживаться в некоторых средах, поэтому лучше всего поддерживать их во время ввода script учетных данных пользователя)

Для проверки правильности ведения верхнего/конечного пробела вы можете использовать:

echo -n "$pwd" | hexdump -C

Примечание: не используйте с реальными паролями, так как он выгружается на консоль!

HT: Ron DuPlain для получения дополнительной информации об отключении IFS.

Ответ 3

Если вам нужно захватить passwd для подачи в качестве параметра для программы, тогда совет единорогов, чтобы просто отключить эхо, хорошо.
Проверка passwd в script не работает - если пользователь может выполнить bash script, у них также есть разрешение на его чтение и просмотр passwd.

Если вы хотите, чтобы люди с паролем запускали программу, безопасный способ - создать новую учетную запись пользователя, которая владеет программой, и иметь script, который использует "sudo" для запуска программы в качестве этого пользователя - он будет предлагать пользователям passwd безопасным способом.