Jak czytać hasła w skryptach bash w sposób podobny do narzędzi, które nie wyświetlają ich na terminalu?
(Zmiana czcionki na czarną na czarną może być trudna dzięki łatwemu kopiowaniu i wklejaniu - więc nie jest to rozwiązanie)
Jak czytać hasła w skryptach bash w sposób podobny do narzędzi, które nie wyświetlają ich na terminalu?
(Zmiana czcionki na czarną na czarną może być trudna dzięki łatwemu kopiowaniu i wklejaniu - więc nie jest to rozwiązanie)
Odpowiedzi:
Od help read
:
-s do not echo input coming from a terminal
man read
, nie zameldowałem się help read
. Dobrze wiedzieć.
man bash
i tam możesz znaleźć opcję -sSilent mode. If input is coming from a terminal, characters are not echoed.
Zawsze stty -echo
wyłączałem echo, a potem czytałem, a potem robiłem stty echo
(czytaj więcej, oglądając człowieka stty
- tj man stty
.). Jest to bardziej przydatne z perspektywy programistów, ponieważ można wyłączyć echo, a następnie odczytać hasło z języka programowania, takiego jak Java, C (++), Python itp., Za pomocą standardowych „czytników” standardowego wejścia.
W bash użycie może wyglądać następująco:
echo -n "USERNAME: "; read uname
echo -n "PASSWORD: "; stty -echo; read passwd; stty echo; echo
program $uname $passwd
passwd= # get rid of passwd
Na przykład Python wyglądałby następująco:
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)
Musiałem to robić wiele razy w Pythonie, więc wiem to całkiem dobrze z tej perspektywy. Jednak nie jest to trudne do przetłumaczenia na inne języki.
termios
,stty
,read -s
wszystko, co robi.