답변:
실제로, 일반적인 호출은 sudo
암호를 전혀 읽지 않습니다 stdin
. 대신에, sudo
직접 액세스 제어 단자 (a 것 tty
또는 pty
비아,/dev/tty
특수 파일을 하여 프롬프트를 출력하고 문자를 직접 읽습니다. 이것은에서 볼 수 있습니다tgetpass.c
sudo
소스 파일에서 .
몇 가지 다른 시나리오가 있습니다.
askpass
예를 들어 -A
매개 변수 에 프로그램이 지정된 경우 해당 프로그램이 호출됩니다.sudo
읽기를 요청 하면 -에 프롬프트가 표시됩니다 . 이 경우가 MadHatter의 대답이 적용됩니다.stdin
-S
stderr
tty
사용할 수 없는 경우
visiblepw
플래그로 제어 됨 sudoers
) sudo
오류가보고됩니다.no tty present and no askpass program specified
sudo
사용하여 다시 떨어질 것이다 stdin
및 stderr
그것은 특별히 요청하지 않은 경우에도 마찬가지입니다. MadHatter의 답변 도 여기에 적용됩니다.파이프는 sudo cat
stdout을 less
stdin에 연결하므로sudo cat
stdin은 영향을받지 않으며 암호를받을 수 있습니다.
프롬프트는 sudo cat
stderr 에서 나옵니다 . bash에서 stdout과 함께 리디렉션 해보십시오.
sudo cat /etc/resolv.conf |& less
응답이 얼마나 다른지 봅니다.
sudo
의 '표준 입력은 여전히 그 암호를 얻는 방법에 직접적으로 관련이없는의 예제 명령을 터미널에 연결되어 : 기본적으로sudo
표준 입력을 통해 암호를 요구하지 않으며이를 통해 프롬프트가 표시됩니다stderr
- 당신은2>/dev/null
그것을 확인 하려고 할 수 있습니다 . 대신sudo
tty에 직접 액세스합니다.