![쉘 스크립트에 "비밀번호"를 입력하는 방법은 무엇입니까? [복사]](https://linux55.com/image/43711/%EC%89%98%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%97%90%20%22%EB%B9%84%EB%B0%80%EB%B2%88%ED%98%B8%22%EB%A5%BC%20%EC%9E%85%EB%A0%A5%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F%20%5B%EB%B3%B5%EC%82%AC%5D.png)
중복 가능성:
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