
如何以一種工具不會在終端機上顯示密碼的方式讀取 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//?/*}"
******