
도구가 터미널에 표시하지 않는 방식으로 bash 스크립트에서 비밀번호를 어떻게 읽을 수 있습니까?
(글꼴을 검정 바탕에 검정으로 변경하는 것은 복사 및 붙여넣기로 쉽게 해결할 수 있으므로 해결 방법이 아닙니다.)
답변1
에서 help read
:
-s do not echo input coming from a terminal
예를 들어, 사용자에게 메시지를 표시하고 변수에 임의의 비밀번호를 읽으려면 passwd
,
IFS= read -s -p 'Password please: ' passwd
답변2
나는 항상 stty -echo
에코를 끄고 읽고 나서 읽곤 했습니다 (자세한 내용은 man of - ie를 stty echo
참조하여 읽으십시오 ). 이는 에코를 끄고 표준 stdin "리더"를 사용하여 Java, C(++), Python 등과 같은 프로그래밍 언어에서 비밀번호를 읽을 수 있으므로 프로그래머의 관점에서 더 유용합니다.stty
man stty
Bash에서 사용법은 다음과 같습니다.
echo -n "USERNAME: "; IFS= read -r uname
echo -n "PASSWORD: "; stty -echo; IFS= read -r passwd; stty echo; echo
program "$uname" "$passwd"
unset -v 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)
파이썬에서 이 작업을 많이 했기 때문에 그런 관점에서는 꽤 잘 알고 있습니다. 하지만 다른 언어로 번역하는 것은 그리 어렵지 않습니다.
답변3
답변4
귀하의 질문은 "도구와 같은 방식으로???"와는 좀 다릅니다. 그래서 이것이 당신에게 효과가 있을지 정확히 모르겠습니다.
system1 $ passwd=abc123
system1 $ printf "%s\n" "${passwd//?/*}"
******