Leer contraseñas sin mostrarlas en pantalla en Bash Scripts

Leer contraseñas sin mostrarlas en pantalla en Bash Scripts

¿Cómo se pueden leer contraseñas en scripts bash de tal manera que las herramientas no las muestren en una terminal?

(Cambiar la fuente a negro sobre negro se soluciona fácilmente copiando y pegando, por lo que no es una solución).

Respuesta1

De help read:

-s        do not echo input coming from a terminal

Por ejemplo, para solicitar al usuario y leer una contraseña arbitraria en la variable passwd,

IFS= read -s -p 'Password please: ' passwd

Respuesta2

Siempre solía stty -echodesactivar el eco, luego leía y luego lo hacía stty echo(lea más viendo man of stty- ie man stty). Esto es más útil desde la perspectiva de los programadores, ya que puede desactivar el eco y luego leer una contraseña de un lenguaje de programación como Java, C(++), Python, etc. con sus "lectores" estándar de entrada estándar.

En bash, el uso podría verse así:

echo -n "USERNAME: "; IFS= read -r uname
echo -n "PASSWORD: "; stty -echo; IFS= read -r passwd; stty echo; echo
program "$uname" "$passwd"
unset -v passwd    # get rid of passwd

Python, por ejemplo, se vería así:

from sys import stdout
from os import system as term

uname = raw_input("USERNAME: ") # read input from stdin until [Enter] in 2
stdout.write("PASSWORD: ")
term("stty -echo") # turn echo off
try:
    passwd = raw_input()
except KeyboardInterrupt: # ctrl+c pressed
    raise SystemExit("Password attempt interrupted")
except EOFError: # ctrl+d pressed
    raise SystemExit("Password attempt interrupted")
finally:
    term("stty echo") # turn echo on again

print "username:", uname
print "password:", "*" * len(passwd)

Tuve que hacer esto muchas veces en Python, así que lo conozco bastante bien desde esa perspectiva. Sin embargo, esto no es muy difícil de traducir a otros idiomas.

Respuesta3

Si está de acuerdo con agregar una dependencia externa, puede usar un cuadro de contraseña proporcionado por herramientas como el diálogo o el látigo.

cola de látigo

Respuesta4

Su pregunta se lee algo diferente "¿en cierto modo como herramientas?" así que no sé exactamente si esto funcionará para ti:

system1 $ passwd=abc123
system1 $ printf "%s\n" "${passwd//?/*}"
******

información relacionada