Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python getpass()와 getuser() 완벽 가이드 – 화면에 에코되지 않는 안전한 비밀번호 입력 처리

Python으로 프로그램을 개발하다 보면 실행 전에 비밀번호 인증을 요구해야 하는 경우가 종종 있습니다. 이럴 때 getpass()getuser() 모듈을 활용하면 매우 유용합니다. 이 모듈들은 비밀번호 보호 설정, 비밀번호 입력 받기 등 다양한 기능을 제공합니다.

이 글에서는 사용자가 입력하는 비밀번호를 화면에 에코(echo)하지 않고 안전하게 처리하는 방법과, 함께 활용할 수 있는 여러 기법들을 살펴보겠습니다.

1. 기본 프롬프트로 비밀번호 입력받기

아래 코드를 logon.py 파일로 저장하고 실행해 보겠습니다. getpass.getpass() 함수는 화면에 프롬프트를 출력한 뒤, 사용자가 Enter 키를 누를 때까지 입력을 받습니다. 특히 입력 중인 문자가 화면에 표시되지 않기 때문에 비밀번호를 안전하게 입력받을 수 있습니다.

예제 코드

import getpass
try:
    pwd = getpass.getpass()
except Exception as err:
    print('Error Occured : ', err)
else:
    print('Password entered :', pwd)

실행 결과

위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.

$ python logon.py
Password:
Password entered: abracadbra

사용자가 비밀번호를 입력하는 동안에는 아무런 문자도 화면에 나타나지 않으며, Enter를 누른 후에야 입력된 값이 변수에 저장됩니다.

2. 보안 질문을 활용한 비밀번호 확인

좀 더 발전된 형태로, prompt 매개변수를 사용해 사용자에게 보안 질문을 던질 수 있습니다. 이렇게 하면 사용자가 비밀번호를 기억해내는 데 도움이 됩니다.

예제 코드

import getpass
pwd = getpass.getpass(prompt = 'What is your favorite colour?')
if pwd == 'Crimson':
    print('You are in!')
else:
    print('Try Again')

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

$ python logon.py
'What is your favorite colour?
You are in!

정답인 'Crimson'을 입력하면 접근이 허용되고, 그렇지 않으면 'Try Again' 메시지가 표시됩니다. 실제 서비스에서는 이런 방식에 반복 시도 제한 등의 추가 보안 장치를 두는 것이 좋습니다.

3. 현재 로그인 이름 표시하기

스크립트를 실행 중인 사용자의 로그인 이름(login name)이 필요할 때가 있습니다. 이때는 getuser() 함수를 사용하면 됩니다. 이 함수는 운영체제 환경변수를 참조하여 현재 사용자 계정명을 반환합니다.

예제 코드

import getpass
user = getpass.getuser()
while True:
    pwd = getpass.getpass("User Name : ", user)
    if pwd == 'Crimson':
        print("You are in!")
    else:
        print("The password you entered is wrong.")

실행 결과

위 코드를 실행하면 다음과 같은 결과를 얻습니다.

User Name: user1
You are in !

마무리

Python의 getpass 모듈은 콘솔 환경에서 비밀번호를 안전하게 입력받기 위한 필수 도구입니다. 핵심 정리는 다음과 같습니다.

  • getpass.getpass(): 입력 내용이 화면에 에코되지 않는 비밀번호 입력 함수
  • getpass.getuser(): 현재 시스템에 로그인한 사용자 이름을 반환하는 함수
  • prompt 매개변수: 원하는 질문이나 안내 문구를 직접 지정할 수 있음

터미널 기반 인증 스크립트, 관리자 도구, 자동화 작업 등에서 민감한 정보를 다룰 때 이 두 함수를 적극적으로 활용해 보시기 바랍니다.