Comment lire les mots de passe dans les scripts bash d'une manière comme les outils qui ne le montrent pas sur le terminal?
(Changer la police en noir sur noir peut être difficile à copier et coller facilement - ce n'est donc pas une solution)
Comment lire les mots de passe dans les scripts bash d'une manière comme les outils qui ne le montrent pas sur le terminal?
(Changer la police en noir sur noir peut être difficile à copier et coller facilement - ce n'est donc pas une solution)
Réponses:
De help read
:
-s do not echo input coming from a terminal
man read
, je n'ai pas vérifié help read
. Bon à savoir.
man bash
et là vous pouvez trouver l'option -sSilent mode. If input is coming from a terminal, characters are not echoed.
J'avais toujours l'habitude stty -echo
de désactiver l'écho, puis de lire et de faire ensuite stty echo
(en savoir plus en regardant man of stty
- ie man stty
). Ceci est plus utile du point de vue des programmeurs car vous pouvez désactiver l'écho puis lire un mot de passe à partir d'un langage de programmation tel que Java, C (++), Python, etc. avec leurs "lecteurs" stdin standard.
En bash, l'utilisation pourrait ressembler à ceci:
echo -n "USERNAME: "; read uname
echo -n "PASSWORD: "; stty -echo; read passwd; stty echo; echo
program $uname $passwd
passwd= # get rid of passwd
Python, par exemple, ressemblerait à:
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)
J'ai dû le faire plusieurs fois en Python, donc je le sais assez bien de ce point de vue. Cependant, ce n'est pas très difficile à traduire dans d'autres langues.
termios
,stty
,read -s
, tout ce qu'il fait.