쉘 스크립트에 "비밀번호"를 입력하는 방법은 무엇입니까? [복사]

쉘 스크립트에 "비밀번호"를 입력하는 방법은 무엇입니까? [복사]

중복 가능성:
Linux 쉘에 입력된 명령을 숨기는 방법은 무엇입니까?
화면에 표시하지 않고 Bash 스크립트에서 비밀번호 읽기

비밀번호를 입력하고 싶지만 다른 유틸리티에서 처리하는 것처럼 사용자가 비밀번호를 입력할 수 있기를 바랍니다. 즉, 문자가 화면에 나타나지 않습니다. 나는 이것을 검색해 보았지만 명확한 답을 찾지 못했습니다.

변수를 승인한 다음 스크립트 시작 부분에 있는 구성 파일 중 하나에 있는 사전 정의된 독립형 비밀번호 하드코딩된 변수에 입력을 일치시켜야 합니다.

예상되는 동작

$./startScript
username: mtk
password: ********

*자리 표시자로 표시됩니다. 이 부분이 보이지 않게 해야 합니다. 현재는 사용자가 입력할 때 비밀번호가 표시됩니다.

어떻게 해야 하나요?

답변1

(or)를 사용하는 경우에는 sh(secure) 옵션과 함께 사용하세요 bash.read-s

read -s pass

비밀번호는 출력에 표시되거나 변수에 저장되지 않고 사용자로부터 읽혀집니다 pass.

답변2

UNIX에는 프롬프트를 표시하고 에코가 비활성화된 상태에서 비밀번호를 읽는 "getpass" C 함수가 있습니다.

이 함수는 프롬프트 문자열을 사용하고 비밀번호가 포함된 NULL로 끝나는 문자열에 대한 포인터를 반환합니다. 최대 비밀번호 길이를 잊지 마세요(시스템의limit.h에서 PASS_MAX를 살펴보세요).

또한 "getpass"는 호출될 때마다 삭제되는 내부 정적 버퍼에 비밀번호를 넣습니다. 따라서 올바른 절차를 수행하려면 가능한 한 빨리 버퍼를 0으로 설정해야 합니다.

다음은 동작을 보여주는 작은 프로그램입니다.

#include <stdio.h>
#include <unistd.h>

int
main( int argc, char** argv ) {
    char* password = getpass( "Password: " );
    printf( "Your password is: '%s'\n", password );

    return 0;
}

답변3

내 생각에는 이 코드가 원하는 대로 작동해야 한다고 생각합니다.

#!/bin/bash

unset username
unset password
echo -n "username:"
read username
prompt="password:"
while IFS= read -p "$prompt" -r -s -n 1 char
do
    if [[ $char == $'\0' ]]
    then
         break
    fi
    prompt='*'
    password+="$char"
done

관련 정보