
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 -echo
desligar 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
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//?/*}"
******