如何让bash脚本要求输入密码?

Deb*_*ger 44 passwords bash

我想用密码确保程序的执行.

我怎么用bash做到这一点?

Jür*_*zel 77

此命令将从stdin 读取var pwd(禁用echo):

IFS= read -s  -p Password: pwd
Run Code Online (Sandbox Code Playgroud)

取消设置IFS将允许密码中的前导和尾随空格(在某些环境中可能支持这种空格,因此最好在脚本输入用户凭据期间支持它)

要正确处理前导/尾随空白,您可以使用:

echo -n "$pwd" | hexdump -C
Run Code Online (Sandbox Code Playgroud)

注意:不要使用真实密码,因为它转储到控制台!

HT:Ron DuPlain关于IFS取消设置的更多信息.

  • @Triztian是的,上面的内容可能只适用于Bash.接受的答案应该适用于大多数(所有?)shell. (7认同)
  • 如果我使用此而不是接受的答案,是否有任何缺点? (3认同)

cod*_*ict 52

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.
Run Code Online (Sandbox Code Playgroud)


Mar*_*ett 5

如果您需要获取 passwd 作为参数提供给程序,那么 unicorns 建议关闭回声是好的。
在脚本中进行密码检查不起作用 - 如果用户可以执行 bash 脚本,他们也有权阅读它并查看密码。

如果您只想允许拥有密码的人运行程序,那么安全的方法是创建一个拥有该程序的新用户帐户,并拥有一个使用“sudo”以该用户身份运行该程序的脚本 - 它会提示您用户以安全的方式密码。

  • 人们可能会预先计算密码的校验和并将 *it* 存储在脚本中而不是纯文本中,并根据它测试输入的校验和。尽管如此,它仍然可以被打破,但不那么容易。 (2认同)