Làm cách nào để đọc mật khẩu trong tập lệnh bash theo cách như các công cụ không hiển thị trên thiết bị đầu cuối?
(Thay đổi phông chữ thành màu đen trên màu đen có thể khó khăn bằng cách dễ dàng sao chép và dán - vì vậy đó không phải là giải pháp)
Làm cách nào để đọc mật khẩu trong tập lệnh bash theo cách như các công cụ không hiển thị trên thiết bị đầu cuối?
(Thay đổi phông chữ thành màu đen trên màu đen có thể khó khăn bằng cách dễ dàng sao chép và dán - vì vậy đó không phải là giải pháp)
Câu trả lời:
Từ help read
:
-s do not echo input coming from a terminal
man read
, tôi đã không đăng ký help read
. Tốt để biết.
man bash
ở đó bạn có thể tìm thấy tùy chọn -sSilent mode. If input is coming from a terminal, characters are not echoed.
Tôi luôn luôn stty -echo
tắt tiếng vang, sau đó đọc và sau đó làm stty echo
(đọc thêm bằng cách xem người đàn ông của stty
- tức là man stty
). Điều này hữu ích hơn từ góc độ lập trình viên khi bạn có thể tắt tiếng vang và sau đó đọc mật khẩu từ ngôn ngữ lập trình như Java, C (++), Python, v.v. với "trình đọc" chuẩn stdin của họ.
Trong bash, việc sử dụng có thể trông như thế này:
echo -n "USERNAME: "; read uname
echo -n "PASSWORD: "; stty -echo; read passwd; stty echo; echo
program $uname $passwd
passwd= # get rid of passwd
Python, ví dụ, sẽ trông như:
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)
Tôi đã phải làm điều này rất nhiều lần trong Python, vì vậy tôi biết nó khá rõ từ quan điểm đó. Điều này không khó để dịch sang các ngôn ngữ khác.
termios
,stty
,read -s
, bất cứ điều gì mà hiện nó.