Bash 스크립트에서 화면에 표시하지 않고 비밀번호 읽기

Bash 스크립트에서 화면에 표시하지 않고 비밀번호 읽기

도구가 터미널에 표시하지 않는 방식으로 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 등과 같은 프로그래밍 언어에서 비밀번호를 읽을 수 있으므로 프로그래머의 관점에서 더 유용합니다.sttyman 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//?/*}"
******

관련 정보