Como ler senhas em scripts bash de uma maneira como ferramentas que não estão sendo mostradas no terminal?
(Alterar a fonte para preto sobre preto pode ser complicado, fácil de copiar e colar - por isso não é solução)
Como ler senhas em scripts bash de uma maneira como ferramentas que não estão sendo mostradas no terminal?
(Alterar a fonte para preto sobre preto pode ser complicado, fácil de copiar e colar - por isso não é solução)
Respostas:
De help read:
-s do not echo input coming from a terminal
man read, ainda não fiz o check-in help read. Bom saber.
man bashe lá você pode encontrar opção -sSilent mode. If input is coming from a terminal, characters are not echoed.
Eu sempre stty -echodesabilitava o eco, depois lia e depois o fazia stty echo(leia mais vendo man of stty- ie man stty). Isso é mais útil do ponto de vista dos programadores, pois você pode desativar o eco e ler uma senha de uma linguagem de programação como Java, C (++), Python etc. com seus "leitores" padrão do stdin.
No bash, o uso pode ser assim:
echo -n "USERNAME: "; read uname
echo -n "PASSWORD: "; stty -echo; read passwd; stty echo; echo
program $uname $passwd
passwd= # get rid of passwd
Python, por exemplo, teria a seguinte aparência:
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)
Eu tive que fazer isso muitas vezes em Python, então eu sei muito bem dessa perspectiva. Isso não é muito difícil de traduzir para outros idiomas.
termios,stty,read -s, tudo o que faz.