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


20

如何像在终端上不显示工具那样使用bash脚本读取密码?

(通过容易地复制和粘贴将字体更改为黑底黑字可能很棘手,因此不是解决方案)


3
对于阅读此内容的任何人:不要读入回显为黑色且黑底黑字的密码。密码仍会传输,并且如果终端不知道您使用的终端指令,字符将明显地回显。关闭回声。使用termiossttyread -s,任何做的。
Alexios 2012年

这就是为什么我写这不是解决方案;)。
Grzegorz Wierzowiecki 2012年

确实!有时人们会忽略问题并得出错误的结论。:)
Alexios'3

Answers:



5

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

在bash中,用法如下所示:

echo -n "USERNAME: "; read uname
echo -n "PASSWORD: "; stty -echo; read passwd; stty echo; echo
program $uname $passwd
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中做很多次,所以从这个角度来看我非常了解。但是,这并不难翻译成其他语言。


-1

您的问题读起来有点不同,“就像工具一样???” 所以我不知道这是否适合您:

system1 $ passwd=abc123
system1 $ printf "%s\n" "${passwd//?/*}"
******
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.