¿Cuál es la forma más simple de ocultar la entrada del usuario?
¡No lo estoy mostrando!
Ocultar las contraseñas cuando se escriben es una vieja tradición. Tiene sentido desde una perspectiva de seguridad en la mayoría de los contextos: si alguien está mirando por encima de tus hombros, no quieres que sea fácil ver lo que estás escribiendo. (Sin embargo, algunas pautas de seguridad modernas, p. Ej., 1 2 3 4 5 recomiendan tener una opción para hacer que la contraseña sea visible, ya que eso permite al usuario elegir contraseñas más complejas y tener la confianza de que no pasarán su tiempo reparando lo invisible) errores tipográficos: el mayor riesgo no es navegar por el hombro, es adivinar la fuerza bruta, posiblemente fuera de línea).
Habiendo decidido que la contraseña debería estar oculta, los implementadores tuvieron que decidir cómo hacerlo. El terminal tiene un modo donde se muestra la entrada del usuario (eco activado) y un modo donde no se muestra la entrada del usuario (eco desactivado). El modo de desactivación de eco tiene una existencia intrínseca en cierto modo: ese es el modo en el que el terminal no hace el trabajo adicional de repetir la entrada del usuario. Este modo también tiene que existir para aplicaciones en las que escribir una tecla no inserta ese carácter, sino que invoca algún acceso directo de aplicación que está vinculado a esa tecla. Entonces, comandos como passwd
simplemente configurar el terminal en modo de eco desactivado mientras leen una contraseña.
Imprimir asteriscos para cada personaje requeriría un trabajo de implementación adicional por un beneficio relativamente pequeño, que los implementadores del passwd
comando no han tenido ganas de hacer. No hay modo de terminal para imprimir asteriscos porque sería una característica muy especializada, útil solo al ingresar contraseñas.
Por cierto, si desea ver su contraseña al cambiarla, puede usarla cat | passwd
(al menos en algunos sistemas; algunas versiones passwd
requieren una opción como cat | passwd --stdin
y otras no la aceptan). (Incluso puedes hacerlo { echo 'current password'; echo 'new password'; echo 'new password'; } | passwd
, pero no hagas eso: guardaría las contraseñas en el historial de shell, de las cuales hay mucho más riesgo de fugas.) Organizar eso con comandos que leen la contraseña desde el terminal en lugar de lo que sea su entrada estándar, como sudo
o ssh
, es más compleja; si tiene una GUI disponible, puede usar ssh-askpass que muestra cuántos caracteres ha escrito ( SUDO_ASKPASS=/usr/bin/ssh-askpass sudo -A
para sudo; para ssh es complicado cuando lo invoca desde un terminal).