Як читати паролі в bash-скриптах таким чином, як інструменти, які не показують його на терміналі?
(Зміна шрифту на чорний на чорний може бути складним шляхом простого копіювання та вставки - тому це не рішення)
Як читати паролі в bash-скриптах таким чином, як інструменти, які не показують його на терміналі?
(Зміна шрифту на чорний на чорний може бути складним шляхом простого копіювання та вставки - тому це не рішення)
Відповіді:
Від help read
:
-s do not echo input coming from a terminal
man read
, я не зареєструвався help read
. Добре знати.
man bash
там ви можете знайти -s варіантSilent mode. If input is coming from a terminal, characters are not echoed.
Я завжди stty -echo
вимикав відлуння, потім читав, а потім робив stty echo
(читати більше, переглядаючи людину stty
- тобто man stty
). Це корисніше з точки зору програмістів, оскільки ви можете вимкнути відлуння, а потім прочитати пароль з такої мови програмування, як Java, C (++), Python тощо, зі своїми стандартними "читачами".
У bash, використання може виглядати так:
echo -n "USERNAME: "; read uname
echo -n "PASSWORD: "; stty -echo; read passwd; stty echo; echo
program $uname $passwd
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, тому я знаю це досить добре з тієї точки зору. Але це не дуже важко перекласти на інші мови.
termios
,stty
,read -s
, все , що робить це.