2010-04-16 70 views
39

我想用密码保护程序的执行。如何让bash脚本要求输入密码?

如何在bash中做到这一点?

+1

投票结束时不清楚,请指定您希望密码输入的方​​式与其他输入不同。没有呼应问:http://stackoverflow.com/questions/3980668/how-to-get-a-password-from-a-shell-script-without-echoing – 2016-06-29 21:26:03

回答

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从stdin(与回波禁用):

IFS= read -s -p Password: pwd 

取消设置IFS将允许前缘和后在密码空白(这在一些环境中支持,因此最好在您的脚本输入用户凭据期间支持它)

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

echo -n "$pwd" | hexdump -C 

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

HT:Ron DuPlain有关IFS未定位的更多信息。

+3

如果我用这个而不是接受答案? – Triztian 2012-10-19 01:46:24

+7

@Triztian是的,上述可能只适用于Bash。接受的答案应该适用于大多数(所有?)炮弹。 – jberryman 2012-10-22 14:53:57

4

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

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

+1

可能会预先计算密码的校验和,并将其存储在脚本中而不是明文中,并根据输入的校验和来测试。尽管如此,它仍然可以被打破,但不那么容易。 – 2010-04-16 18:11:29

+1

在这种情况下,您只需简单地将脚本复制到您有写入权限的地方,然后取消检查。 – 2010-04-16 18:21:56