만약 내가한다면:
sudo cat /etc/resolv.conf | less
(아마도) stdin이 덜 걸리더라도 암호를 묻는 메시지가 나타납니다. 암호 프롬프트는 어떤 fd에 표시되며 어떻게 입력을 다시 받습니까?
답변
실제로, 일반적인 호출은 sudo암호를 전혀 읽지 않습니다 stdin. 대신에, sudo직접 액세스 제어 단자 (a 것 tty또는 pty비아,/dev/tty 특수 파일을 하여 프롬프트를 출력하고 문자를 직접 읽습니다. 이것은에서 볼 수 있습니다tgetpass.csudo 소스 파일에서 .
몇 가지 다른 시나리오가 있습니다.
askpass예를 들어-A매개 변수 에 프로그램이 지정된 경우 해당 프로그램이 호출됩니다.- 그렇지 않으면, 예를 들어 플래그 와 같이 특별히
sudo읽기를 요청 하면 -에 프롬프트가 표시됩니다 . 이 경우가 MadHatter의 대답이 적용됩니다.stdin-Sstderr - 그렇지 않으면
tty사용할 수 없는 경우- 비밀번호 에코가 비활성화 된 경우 (기본적으로,
visiblepw플래그로 제어 됨sudoers)sudo오류가보고됩니다.no tty present and no askpass program specified - 그렇지 않으면
sudo사용하여 다시 떨어질 것이다stdin및stderr그것은 특별히 요청하지 않은 경우에도 마찬가지입니다. MadHatter의 답변 도 여기에 적용됩니다.
- 비밀번호 에코가 비활성화 된 경우 (기본적으로,
답변
파이프는 sudo catstdout을 lessstdin에 연결하므로sudo cat stdin은 영향을받지 않으며 암호를받을 수 있습니다.
프롬프트는 sudo catstderr 에서 나옵니다 . bash에서 stdout과 함께 리디렉션 해보십시오.
sudo cat /etc/resolv.conf |& less
응답이 얼마나 다른지 봅니다.
