Bagaimana membaca kata sandi dalam skrip bash dengan cara seperti alat yang tidak ditampilkan di terminal?
(Mengganti font menjadi hitam menjadi hitam mungkin gampang-gampang susah untuk disalin & tempel - jadi itu bukan solusi)
Bagaimana membaca kata sandi dalam skrip bash dengan cara seperti alat yang tidak ditampilkan di terminal?
(Mengganti font menjadi hitam menjadi hitam mungkin gampang-gampang susah untuk disalin & tempel - jadi itu bukan solusi)
Jawaban:
Dari help read
:
-s do not echo input coming from a terminal
man read
, saya belum check-in help read
. Senang mendengarnya.
man bash
dan di sana Anda dapat menemukan opsi -sSilent mode. If input is coming from a terminal, characters are not echoed.
Saya selalu stty -echo
mematikan gema, kemudian membaca dan setelah itu melakukan stty echo
(baca lebih lanjut dengan melihat man stty
- yaitu man stty
). Ini lebih berguna dari perspektif pemrogram karena Anda dapat mematikan gema dan kemudian membaca kata sandi dari bahasa pemrograman seperti Java, C (++), Python, dll. Dengan stdin standar "pembaca".
Dalam bash, penggunaannya bisa seperti ini:
echo -n "USERNAME: "; read uname
echo -n "PASSWORD: "; stty -echo; read passwd; stty echo; echo
program $uname $passwd
passwd= # get rid of passwd
Python, misalnya, akan terlihat seperti:
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)
Saya harus melakukan ini berkali-kali dengan Python, jadi saya tahu itu cukup baik dari perspektif itu. Ini tidak terlalu sulit untuk diterjemahkan ke bahasa lain.
termios
,stty
,read -s
, apa pun yang melakukannya.