"Mascarando" pseudo-senha digitada pelo usuário
Publicado por Sandro Marcell (última atualização em 14/03/2010)
[ Hits: 10.656 ]
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
Sincronizar arquivos com rsync
Filtrando processos facilmente com psaux ( ps aux + grep + wc -l)
Ajuste de horário e sincronismo
Desligamento programado com interface gráfica em Zenity
Como aprovar Pull Requests em seu repositório Github via linha de comando
Como gerar um podcast a partir de um livro em PDF
Automatizando digitação de códigos 2FA no browser
Resolver problemas de Internet
Como compartilhar a tela do Ubuntu com uma Smart TV (LG, Samsung, etc.)
Como Definir o Painel Principal em Múltiplos Monitores no Linux Mint
Minecraft Launcher para Arch Linux
Instalar o Apache, MySQL e PHP no Oracle Linux 8
Resolvendo o erro "libQt6Widgets.so.6: cannot open shared object file" no Linux
Como bloquear e desbloquear papel de parede no Ubuntu 24.04 (0)
Mouse bluetooth no Debian 12.10. (0)
tentando instalar em um notebook antigo o Linux LegacyOS_2023... (2)