Lendo senhas sem aparecer na tela em Bash Scripts

Lendo senhas sem aparecer na tela em Bash Scripts

Como alguém pode ler senhas em scripts bash de tal forma que as ferramentas não as mostrem em um terminal?

(Alterar a fonte para preto sobre preto é facilmente contornado copiando e colando, portanto não é uma solução.)

Responder1

De help read:

-s        do not echo input coming from a terminal

Por exemplo, para solicitar ao usuário e ler uma senha arbitrária na variável passwd,

IFS= read -s -p 'Password please: ' passwd

Responder2

Eu sempre costumava stty -echodesligar o eco, depois ler e depois fazer stty echo(leia mais visualizando man of stty- ie man stty). Isso é mais útil do ponto de vista dos 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" stdin padrão.

No bash, o uso poderia ser assim:

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, por exemplo, ficaria assim:

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)

Tive que fazer isso muitas vezes em Python, então sei muito bem dessa perspectiva. No entanto, isso não é muito difícil de traduzir para outros idiomas.

Responder3

Se você quiser adicionar uma dependência externa, poderá usar uma caixa de senha fornecida por ferramentas como diálogo ou chicote.

Rabo de Chicote

Responder4

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

system1 $ passwd=abc123
system1 $ printf "%s\n" "${passwd//?/*}"
******

informação relacionada