Bash Shell提示输入密码

你需要提示用户输入密码,但不希望在屏幕上回显出密码内容。

解决方案

用 read 命令读取用户输入,但要加上一个特殊选项来关闭回显:

read -s -p "password: " PASSWD
printf "%b" "\n"

讨论

-s 选项告诉 read 命令不要回显输入的字符(s 代表 silent),-p 选项指明下一个参数是提示信息,会在读取用户输入之前显示。
从用户那里读取到的输入行保存在变量 $PASSWD 中。

在 read 之后,我们用 printf 输出了一个换行符。这里的 printf 不能少,因为 read -s 会关闭字符回显。如果禁止了回显功能,当用户按下回车键时,就不会回显换行符,后续输出就会和提示信息出现在同一行。输出换行符会将光标带到下一行,这也正是我们想要的效果。将代码全都写在同一行也许更方便,这样可以避免干扰代码逻辑(另外还能避免将其复制到别处时出现遗漏):

read -s -p "password: " PASSWD ; printf "%b" "\n"

如果要将密码读入环境变量,那就要小心了,因为密码在内存中是以明文形式存放的,有可能通过核心转储或 /proc/core(如果你所用的操作系统提供了 /proc/)访问到。在多进程环境中也是如此,其他进程也有可能读取到密码。可能的话,最好使用 SSH 证书。无论任何情况,明智的做法是假定系统中的 root 和其他可能的用户都能接触到密码并对其进行相应的处理。

 有些陈旧的脚本也许会用 stty -echo 来禁止输入密码时的屏幕回显。这么做的问题在于如果脚本意外终止,那么回显仍会处于关闭状态。有经验的用户知道输入 stty sane 将其恢复,但这并非人人都懂。如果你的确需要使用这种方法,就设置好陷阱,以便在脚本终止时重新启用回显。

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!