Passwörter lesen, ohne sie in Bash-Skripten auf dem Bildschirm anzuzeigen

Passwörter lesen, ohne sie in Bash-Skripten auf dem Bildschirm anzuzeigen

Wie kann man Passwörter in Bash-Skripten so lesen, dass Tools sie auf einem Terminal nicht anzeigen?

(Das Ändern der Schriftart auf Schwarz auf Schwarz lässt sich leicht durch Kopieren und Einfügen umgehen, ist also keine Lösung.)

Antwort1

Aus help read:

-s        do not echo input coming from a terminal

Um beispielsweise den Benutzer aufzufordern und ein beliebiges Passwort in die Variable einzulesen passwd,

IFS= read -s -p 'Password please: ' passwd

Antwort2

Ich habe immer stty -echodas Echo ausgeschaltet, dann gelesen und danach ausgeführt stty echo(lesen Sie mehr, indem Sie man of stty- ie anzeigen man stty). Dies ist aus der Sicht eines Programmierers nützlicher, da Sie das Echo ausschalten und dann ein Passwort aus einer Programmiersprache wie Java, C(++), Python usw. mit ihren Standard-Stdin-"Readern" lesen können.

In Bash könnte die Verwendung folgendermaßen aussehen:

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 würde beispielsweise so aussehen:

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)

Ich musste das oft in Python machen, also kenne ich es aus dieser Perspektive ziemlich gut. Es ist jedoch nicht sehr schwer, dies in andere Sprachen zu übersetzen.

Antwort3

Wenn Sie mit dem Hinzufügen einer externen Abhängigkeit einverstanden sind, können Sie ein Kennwortfeld verwenden, das von Tools wie Dialog oder Whiptail bereitgestellt wird.

Peitschenschwanz

Antwort4

Ihre Frage liest sich irgendwie anders: „In gewisser Weise wie Werkzeuge???“, daher weiß ich nicht genau, ob das hier für Sie funktioniert:

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

verwandte Informationen