"Mascarando" pseudo-senha digitada pelo usuário
Publicado por Sandro Marcell (última atualização em 14/03/2010)
[ Hits: 10.363 ]
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 para checagem de Ponto de Acesso.
mailnow - Envia mensagens pelo shell
rc.mailMyIp - Informa seu IP externo para o Gmail
Atenção a quem posta conteúdo de dicas, scripts e tal (1)
Manutenção de sistemas Linux Debian e derivados com apt-get, apt, aptitude e dpkg
Melhorando o tempo de boot do Fedora e outras distribuições
Como instalar as extensões Dash To Dock e Hide Top Bar no Gnome 45/46
Como Atualizar Fedora 39 para 40
Instalar Google Chrome no Debian e derivados
Consertando o erro do Sushi e Wayland no Opensuse Leap 15
Instalar a última versão do PostgreSQL no Lunix mantendo atualizado
Flathub na sua distribuição Linux e comandos básicos de gerenciamento
erro ao clonar repo github (7)
ASRock H310CM-HG4 vs Linux (1)
Como adicionar módulo de saúde da bateria dos notebooks Acer ao kernel... (26)
[Shell Script] Script para desinstalar pacotes desnecessários no OpenSuse
[Shell Script] Script para criar certificados de forma automatizada no OpenVpn
[Shell Script] Conversor de vídeo com opção de legenda
[C/C++] BRT - Bulk Renaming Tool
[Shell Script] Criação de Usuarios , Grupo e instalação do servidor de arquivos samba