¿Cómo leer las contraseñas en los scripts de bash de una manera como las herramientas que no lo muestran en la terminal?
(Cambiar la fuente a negro sobre negro puede ser complicado por la facilidad de copiar y pegar, por lo que no es la solución)
¿Cómo leer las contraseñas en los scripts de bash de una manera como las herramientas que no lo muestran en la terminal?
(Cambiar la fuente a negro sobre negro puede ser complicado por la facilidad de copiar y pegar, por lo que no es la solución)
Respuestas:
De help read
:
-s do not echo input coming from a terminal
man read
, no me he registrado help read
. Bueno saber.
man bash
y allí puedes encontrar la opción -sSilent mode. If input is coming from a terminal, characters are not echoed.
Siempre solía stty -echo
desactivar el eco, luego leer y luego hacer stty echo
(leer 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.
En bash, el uso podría verse así:
echo -n "USERNAME: "; read uname
echo -n "PASSWORD: "; stty -echo; read passwd; stty echo; echo
program $uname $passwd
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 sé bastante bien desde esa perspectiva. Sin embargo, esto no es muy difícil de traducir a otros idiomas.
termios
,stty
,read -s
, cualquier cosa que lo hace.