"Mascarando" pseudo-senha digitada pelo usuário
Publicado por Sandro Marcell (última atualização em 14/03/2010)
[ Hits: 10.673 ]
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
Script de compilação automática do GCC-5.3.0 para Debian/Ubuntu de 32 bits
Backup completo e automatizado da base de dados do ZODB
Script Firewall Iptables + compartilhar internet
Atualizando o Passado: Linux no Lenovo G460 em 2025
aaPanel - Um Painel de Hospedagem Gratuito e Poderoso
O macete do Warsaw no Linux Mint e cia
O que você quer para sua vida ao usar o Linux?
Visualizar arquivos em formato markdown (ex.: README.md) pelo terminal
Dando - teoricamente - um gás no Gnome-Shell do Arch Linux
App SCRCPY travando o sistema por completo. (1)
Teclado n~ao escreve abnt2 (2)
Olha que maravilha, Arch no C2D 7400, 2GB de RAM, vídeo onboard e no G... (4)