Bash
在 Bash 腳本中讀取密碼而不顯示在螢幕上
如何以工具不會在終端上顯示密碼的方式讀取 bash 腳本中的密碼?
(將字型更改為黑底黑字很容易通過複製和粘貼來解決,所以這不是解決方案。)
來自
help read
:-s do not echo input coming from a terminal
例如,提示使用者並將任意密碼讀入變數
passwd
中,IFS= read -s -p 'Password please: ' passwd
我總是習慣性
stty -echo
地關閉迴聲,然後閱讀,然後再做stty echo
(通過查看 man of -ie 了解更多資訊stty
)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 中多次這樣做,所以從這個角度來看,我非常了解它。不過,這並不難翻譯成其他語言。