Bash

在 Bash 腳本中讀取密碼而不顯示在螢幕上

  • February 1, 2022

如何以工具不會在終端上顯示密碼的方式讀取 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 了解更多資訊sttyman 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 中多次這樣做,所以從這個角度來看,我非常了解它。不過,這並不難翻譯成其他語言。

引用自:https://unix.stackexchange.com/questions/35088