Lendo senhas sem mostrar na tela em Bash Scripts

16

Como ler senhas em scripts bash de uma forma como ferramentas que não estão mostrando no terminal?

(Alterar a fonte para preto no preto pode ser complicado, pois é fácil de copiar e colar; portanto, não é uma solução)

    
por Grzegorz Wierzowiecki 26.03.2012 / 23:09

3 respostas

25

De help read :

-s        do not echo input coming from a terminal
    
por 26.03.2012 / 23:11
5

Sempre usei stty -echo para desativar o eco, depois leia e depois faça stty echo (leia mais visualizando man de stty - ou seja, man stty ). Isso é mais útil do ponto de vista de programadores, pois você pode desativar o eco e depois ler uma senha de uma linguagem de programação como Java, C (++), Python, etc. com seus "leitores" padrão stdin.

No bash, o uso poderia 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

O Python, por exemplo, seria parecido com:

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, no entanto.

    
por 02.11.2014 / 06:16
0

Sua pergunta é meio diferente "de uma maneira como as ferramentas ???" então não sei exatamente se isso funcionará para você:

system1 $ passwd=abc123
system1 $ printf "%s\n" "${passwd//?/*}"
******
    
por 26.03.2012 / 23:46

Tags