【问题标题】:How to make bash script ask for a password? [closed]如何让 bash 脚本要求输入密码? [关闭]
【发布时间】:2011-02-08 21:17:34
【问题描述】:

我想用密码保护程序的执行。如何要求用户输入密码而不回显?

【问题讨论】:

标签: bash passwords


【解决方案1】:
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.

【讨论】:

    【解决方案2】:

    此命令将从标准输入读入 var pwd(禁用回显):

    IFS= read -s  -p Password: pwd
    

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

    要验证前导/尾随空格是否得到适当处理,您可以使用:

    echo -n "$pwd" | hexdump -C
    

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

    HT:Ron DuPlain 了解有关 IFS 取消设置的更多信息。

    【讨论】:

    • 如果我使用这个而不是接受的答案有什么缺点吗?
    • @Triztian 是的,以上内容可能仅适用于 Bash。接受的答案应该适用于大多数(所有?)shell。
    【解决方案3】:

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

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

    【讨论】:

    • 一个人可能会预先计算密码的校验和并将 it 存储在脚本中而不是明文中,并根据它测试输入的校验和。不过,它仍然可以被破坏,但不太容易。
    • 在这种情况下,您只需将脚本复制到您有写入权限的地方,然后取消勾选即可。
    猜你喜欢
    • 1970-01-01
    • 2018-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-07
    • 2012-05-17
    • 1970-01-01
    • 2018-12-30
    相关资源
    最近更新 更多