2010-04-16 2 views
39

Я хочу обеспечить выполнение программы с помощью пароля.Как сделать скрипт bash запросить пароль?

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

+1

Голосование, чтобы закрыть как неясное, укажите, как вы хотите, чтобы ввод пароля отличался от других входов. Нет эхо-ответа по адресу: http://stackoverflow.com/questions/3980668/how-to-get-a-password-from-a-shell-script-without-echoing –

ответ

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

Эта команда будет считан в вар PWD из стандартного ввода (с эхо-инвалидов):

IFS= read -s -p Password: pwd 

Отключение МФС позволит начальные и конечные пробелы в паролей (которые могут быть поддержаны в некоторых средах , так что лучше всего поддерживать его во время ввода вашего пользователя учетных данных пользователя)

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

echo -n "$pwd" | hexdump -C 

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

HT: Ron DuPlain за эту дополнительную информацию о снятии IFS.

+3

Есть ли недостатки, если я использовал это вместо принятый ответ? – Triztian

+7

@Triztian да, вышеупомянутое, вероятно, будет работать только в Bash. Принятый ответ должен работать на большинстве (всех?) Оболочек. – jberryman

4

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

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

+1

Можно предварительно скомпоновать контрольную сумму пароля и сохранить * it * в скрипте вместо открытого текста и проверить контрольную сумму ввода на это. Однако он все равно может быть сломан, но менее легко. –

+1

В этом случае вы просто просто скопируете скрипт где-нибудь, у вас есть разрешение на запись, и удалите чек. –

Смежные вопросы