在 Bash 脚本中读取密码而不显示在屏幕上

在 Bash 脚本中读取密码而不显示在屏幕上

如何以一种工具不会在终端上显示密码的方式读取 bash 脚本中的密码?

(通过复制和粘贴可以轻松将字体更改为黑底黑字,因此这不是解决方案。)

答案1

help read

-s        do not echo input coming from a terminal

例如,要提示用户并将任意密码读取到变量中passwd

IFS= read -s -p 'Password please: ' passwd

答案2

我总是习惯stty -echo关闭回声,然后阅读,然后再做stty echo(通过查看 man of stty- ie来阅读更多内容man stty)。从程序员的角度来看,这更有用,因为您可以关闭回显,然后使用标准输入“读取器”从 Java、C(++)、Python 等编程语言读取密码。

在 bash 中,用法可能如下所示:

echo -n "USERNAME: "; IFS= read -r uname
echo -n "PASSWORD: "; stty -echo; IFS= read -r passwd; stty echo; echo
program "$uname" "$passwd"
unset -v passwd    # get rid of passwd

例如,Python 看起来像:

from sys import stdout
from os import system as term

uname = raw_input("USERNAME: ") # read input from stdin until [Enter] in 2
stdout.write("PASSWORD: ")
term("stty -echo") # turn echo off
try:
    passwd = raw_input()
except KeyboardInterrupt: # ctrl+c pressed
    raise SystemExit("Password attempt interrupted")
except EOFError: # ctrl+d pressed
    raise SystemExit("Password attempt interrupted")
finally:
    term("stty echo") # turn echo on again

print "username:", uname
print "password:", "*" * len(passwd)

我必须在 Python 中多次执行此操作,因此从这个角度我非常了解它。不过,将其翻译成其他语言并不难。

答案3

如果您愿意添加外部依赖项,则可以使用由dialog或whiptail等工具提供的密码框。

鞭尾鱼

答案4

你的问题读起来有点不同“以工具之类的方式???”所以我不知道这是否适合你:

system1 $ passwd=abc123
system1 $ printf "%s\n" "${passwd//?/*}"
******

相关内容