如何以一种工具不会在终端上显示密码的方式读取 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
答案4
你的问题读起来有点不同“以工具之类的方式???”所以我不知道这是否适合你:
system1 $ passwd=abc123
system1 $ printf "%s\n" "${passwd//?/*}"
******