Qual é a maneira mais simples de ocultar a entrada do usuário?
Não está exibindo!
Ocultar senhas quando elas estão sendo digitadas é uma tradição antiga. Faz sentido do ponto de vista da segurança na maioria dos contextos: se alguém está olhando por cima dos ombros, você não quer facilitar a visualização do que está digitando. (Algumas diretrizes modernas de segurança, por exemplo, 1 2 3 4 5 recomenda ter a opção de tornar a senha visível, porque isso permite que o usuário escolha mais senhas complexas e ter certeza de que eles não estarão gastando seu tempo corrigindo erros não vistos. O maior risco não é surfar no ombro, é adivinhar a força bruta, possivelmente offline.)
Tendo decidido que a senha deveria estar oculta, os implementadores tinham que decidir como fazê-lo. O terminal tem um modo onde a entrada do usuário é mostrada (ecoado) e um modo onde a entrada do usuário não é mostrada (eco desligado). O modo echo off tem uma existência intrínseca: é o modo em que o terminal não faz o trabalho extra de ecoar a entrada do usuário. Esse modo também precisa existir para aplicativos em que digitar uma chave não insere esse caractere, mas invoca algum atalho de aplicativo vinculado a essa chave. Então, comandos como passwd
apenas configuram o terminal para o modo echo off enquanto estão lendo uma senha.
Imprimir asteriscos para cada caractere exigiria trabalho de implementação extra apenas para um benefício relativamente pequeno, que os implementadores do comando passwd
não gostaram de fazer. Não há modo de terminal para imprimir asteriscos porque seria um recurso muito especializado, útil somente ao inserir senhas.
A propósito, se você quiser ver sua senha ao alterá-la, use cat | passwd
(pelo menos em alguns sistemas - algumas versões de passwd
exigem uma opção como cat | passwd --stdin
e algumas não aceitam isso em tudo). (Você pode até fazer { echo 'current password'; echo 'new password'; echo 'new password'; } | passwd
, mas não faça isso: ele salvaria as senhas no histórico do shell, do qual há muito mais risco de vazamento.) Organizando isso com comandos que lêem a senha do terminal do que qualquer entrada padrão, como sudo
ou ssh
, é mais complexo; se você tem uma GUI disponível, você pode usar ssh-askpass que mostra quantos caracteres você digitou ( SUDO_ASKPASS=/usr/bin/ssh-askpass sudo -A
para sudo; para ssh é complicado quando você invoca a partir de um terminal).