Come leggere le password negli script bash in un modo simile a strumenti che non le mostrano sul terminale?
(La modifica del carattere in nero su nero potrebbe essere difficile da copiare e incollare, quindi non è una soluzione)
Come leggere le password negli script bash in un modo simile a strumenti che non le mostrano sul terminale?
(La modifica del carattere in nero su nero potrebbe essere difficile da copiare e incollare, quindi non è una soluzione)
Risposte:
Da help read
:
-s do not echo input coming from a terminal
man read
, non ho effettuato il check-in help read
. Buono a sapersi.
man bash
e lì puoi trovare l'opzione -sSilent mode. If input is coming from a terminal, characters are not echoed.
Ho sempre usato stty -echo
per disattivare l'eco, quindi leggere e poi fare stty echo
(leggi di più visualizzando man of stty
- ie man stty
). Questo è più utile dal punto di vista dei programmatori poiché è possibile disattivare l'eco e quindi leggere una password da un linguaggio di programmazione come Java, C (++), Python, ecc. Con i loro "lettori" standard stdin.
In bash, l'uso potrebbe apparire così:
echo -n "USERNAME: "; read uname
echo -n "PASSWORD: "; stty -echo; read passwd; stty echo; echo
program $uname $passwd
passwd= # get rid of passwd
Python, ad esempio, sarebbe simile a:
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)
Ho dovuto farlo molte volte in Python, quindi lo conosco abbastanza bene da quella prospettiva. Questo non è molto difficile da tradurre in altre lingue, però.
termios
,stty
,read -s
, tutto ciò che fa.