Wie liest man Passwörter in Bash-Skripten wie Tools, die sie nicht auf dem Terminal anzeigen?
(Das Ändern der Schriftart in Schwarz auf Schwarz ist möglicherweise schwierig, da das Kopieren und Einfügen einfach ist - es ist also keine Lösung.)
Wie liest man Passwörter in Bash-Skripten wie Tools, die sie nicht auf dem Terminal anzeigen?
(Das Ändern der Schriftart in Schwarz auf Schwarz ist möglicherweise schwierig, da das Kopieren und Einfügen einfach ist - es ist also keine Lösung.)
Antworten:
Von help read
:
-s do not echo input coming from a terminal
man read
, ich habe nicht eingecheckt help read
. Gut zu wissen.
man bash
und dort finden Sie -s OptionSilent mode. If input is coming from a terminal, characters are not echoed.
Ich habe immer das stty -echo
Echo ausgeschaltet, dann gelesen und danach getan stty echo
(lesen Sie mehr, indem Sie man von stty
- ie sehen man stty
). Dies ist aus Sicht des Programmierers nützlicher, da Sie das Echo deaktivieren und dann ein Kennwort aus einer Programmiersprache wie Java, C (++), Python usw. mit ihren Standard-Standard-"Lesegeräten" lesen können.
In Bash könnte die Verwendung so aussehen:
echo -n "USERNAME: "; read uname
echo -n "PASSWORD: "; stty -echo; read passwd; stty echo; echo
program $uname $passwd
passwd= # get rid of passwd
Python würde zum Beispiel 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, deshalb kenne ich es aus dieser Perspektive ziemlich gut. Dies ist jedoch nicht sehr schwer in andere Sprachen zu übersetzen.
termios
,stty
,read -s
, alles, was sie tut.