도구가 터미널에 비밀번호를 표시하지 않는 방식으로 bash 스크립트에서 비밀번호를 읽으려면 어떻게 해야 합니까?
(글꼴은 복사해서 붙여넣으면 쉽게 검은 바탕에 검은색으로 바뀔 수 있으므로 이는 해결방법이 아닙니다.)
답변1
에서 help read
:
-s do not echo input coming from a terminal
예를 들어, 사용자에게 메시지를 표시하고 임의의 비밀번호를 변수로 읽으려면 passwd
,
IFS= read -s -p 'Password please: ' passwd
답변2
stty -echo
나는 항상 에코를 끄고, 읽고, 그리고 나서 하는 습관을 만든다 stty echo
( stty
자세한 내용은 남자를 보면서 읽어보세요 man stty
). 프로그래머의 관점에서 볼 때 이는 에코를 끄고 표준 입력 "리더"를 사용하여 Java, C(++), Python 등과 같은 프로그래밍 언어에서 비밀번호를 읽을 수 있기 때문에 더 유용합니다.
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//?/*}"
******