화면에 표시하지 않고 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나는 항상 에코를 끄고, 읽고, 그리고 나서 하는 습관을 만든다 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//?/*}"
******

관련 정보