"Mascarando" pseudo-senha digitada pelo usuário
Publicado por Sandro Marcell (última atualização em 14/03/2010)
[ Hits: 10.753 ]
Homepage: http://sanmarcell.wordpress.com
Uma função bem legal que encontrei em www.unix.com escrita em Ksh. Ela mascara uma pseudo-senha digitada pelo usuário utilizando para isso um caractere qualquer, tipo:
Digite sua senha: *****
Achei super interessante e então resolvi "portá-la" para o Bash.
Versão original em Ksh: http://www.unix.com/shell-programming-scripting/49490-reading-password-echo-character.html
#
# Funcao que 'mascara' uma pseudo-senha digitada pelo usuario.
#
# Ex.:
# Digite a senha: *********
#
# Versao original escrita em Ksh'93 por 'Perderabo'
# http://www.unix.com/shell-programming-scripting/49490-reading-password-echo-character.html
#
# Portada para o Bash-3.1.17 por Sandro Marcell <sandro_marcell@yahoo.com.br>
#
# Mais detalhes: 'man bash', 'man stty' e 'man dd'
#
# Obs.: Caso a tecla 'backspace' nao funcione, utilize o comando 'showkey -a'
# para descobrir seu valor e altere conforme o caso.
#
# P.S. Foram feitas pequenas alteracoes em relacao ao codigo original! =)
#
exec 3>&1
function mascaraSenha {
local mascara backspace enter terminal_info caractere teclas senha
local -a caracteres
mascara="*"
# Teclas de controle
enter=$(printf '\r')
backspace=$(printf '\b')
printf "%s" "$1" >&3
# Salva a configuracao corrente do terminal
terminal_info=$(stty --save)
# Desabilitando impressao de caracteres
stty -echo -icrnl -icanon min 1 time 0
caractere=0
while true
do
# Teclas pressionadas
teclas=$(dd bs=1 count=1 status=noxfer 2> /dev/null)
case $teclas in
$enter)
break ;;
$backspace)
# Volta o cursor uma posicao
if ((caractere))
then
printf "%s" "$backspace $backspace" >&3
((caractere--))
fi
;;
*)
# Imprimi a 'mascara' na tela
printf "%c" "$mascara" >&3
# Armazena os caracteres especificados
caracteres[caractere]="$teclas"
((caractere++))
esac
done
# Restaura a configuracao do terminal
stty "$terminal_info" ; echo "" >&3
# Devolve a 'senha' sem caracteres de controle
for ((i = 0 ; i < caractere ; i++))
do
senha+="${caracteres[i]}"
done
echo "$senha"
return 0
}
senha=$(mascaraSenha "Senha: ")
exec 3>&-
echo "A senha digitada foi '$senha'"
# Fim
Manutenção básica em partições Linux
Sysinfo - Informações sobre o seu computador
ORACLE 10.2g - Fazendo Restore
Usando netstat para verificar conexões e portas
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Novos apps de produtividade, avanços em IA e distros em ebulição agitam o universo Linux
Como instalar o repositório do DBeaver no Ubuntu
Como instalar o Plex Media Server no Ubuntu
Digitando underscore com "shift" + "barra de espaços"
Como ativar a lixeira e recuperar aquivos deletados em um servidor Linux
Como mudar o nome de dispositivos Bluetooth via linha de comando
PIP3 - erro ao instalar módulo do mariadb para o Python (9)
É normal não gostar de KDE? (8)
O programa assinador digital (0)
dpkg: erro: gatilho de arquivo duplicado chamado pelo arquivo de nome (6)









