
Как можно считать пароли в скриптах 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 и т. д. с их стандартными stdin "читателями".
В 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
решение4
Ваш вопрос звучит немного по-другому: «в каком-то смысле как инструменты???», поэтому я не знаю, подойдет ли вам это:
system1 $ passwd=abc123
system1 $ printf "%s\n" "${passwd//?/*}"
******