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

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

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

如果您願意新增外部依賴項,則可以使用dialog或whiptail等工具提供的密碼框。

鞭尾魚

答案4

你的問題讀起來有點不同“以工具之類的方式???”所以我不知道這是否適合你:

system1 $ passwd=abc123
system1 $ printf "%s\n" "${passwd//?/*}"
******

相關內容