만약 내가한다면:
sudo cat /etc/resolv.conf | less
(아마도) stdin이 덜 걸리더라도 암호를 묻는 메시지가 나타납니다. 암호 프롬프트는 어떤 fd에 표시되며 어떻게 입력을 다시 받습니까?
답변
실제로, 일반적인 호출은 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
응답이 얼마나 다른지 봅니다.