วิธีการอ่านรหัสผ่านในสคริปต์ทุบตีในลักษณะเช่นเครื่องมือที่ไม่แสดงใน terminal?
(การเปลี่ยนแบบอักษรเป็นสีดำบนพื้นสีดำอาจทำได้ยากโดยการคัดลอกและวางอย่างง่ายดายดังนั้นจึงไม่ใช่วิธีแก้ปัญหา)
วิธีการอ่านรหัสผ่านในสคริปต์ทุบตีในลักษณะเช่นเครื่องมือที่ไม่แสดงใน terminal?
(การเปลี่ยนแบบอักษรเป็นสีดำบนพื้นสีดำอาจทำได้ยากโดยการคัดลอกและวางอย่างง่ายดายดังนั้นจึงไม่ใช่วิธีแก้ปัญหา)
คำตอบ:
จากhelp read
:
-s do not echo input coming from a terminal
man read
help read
ดีแล้วที่รู้.
man bash
และคุณสามารถหาตัวเลือก -s ได้Silent mode. If input is coming from a terminal, characters are not echoed.
ฉันมักstty -echo
จะปิดเสียงก้องจากนั้นอ่านและทำต่อไปstty echo
(อ่านเพิ่มเติมโดยดูคนของstty
- เช่นman stty
) สิ่งนี้มีประโยชน์มากขึ้นจากมุมมองของโปรแกรมเมอร์ในขณะที่คุณสามารถปิดเสียงก้องแล้วอ่านรหัสผ่านจากภาษาการเขียนโปรแกรมเช่น Java, C (++), Python และอื่น ๆ ด้วย stdin มาตรฐานของพวกเขา
ในทุบตีการใช้งานอาจมีลักษณะเช่นนี้:
echo -n "USERNAME: "; read uname
echo -n "PASSWORD: "; stty -echo; read passwd; stty echo; echo
program $uname $passwd
passwd= # get rid of passwd
ตัวอย่างเช่น Python จะมีลักษณะดังนี้:
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)
ฉันต้องทำสิ่งนี้หลายครั้งใน Python ดังนั้นฉันรู้ว่ามันค่อนข้างดีจากมุมมองนั้น แม้ว่ามันจะไม่ยากมากนักในการแปลเป็นภาษาอื่น
คำถามของคุณอ่าน "แตกต่างกันในลักษณะที่เป็นเครื่องมือ ???" ดังนั้นฉันไม่ทราบแน่ชัดว่าจะใช้กับคุณได้หรือไม่:
system1 $ passwd=abc123
system1 $ printf "%s\n" "${passwd//?/*}"
******
termios
,stty
,read -s
สิ่งที่ไม่ได้