Antworten:
Tatsächlich sudoliest ein typischer Aufruf von das Passwort überhaupt nicht aus stdin. Greifen Sie stattdessen sudodirekt auf das steuernde Terminal zu (a ttyoder ptyüber die /dev/ttyspezielle Datei) und geben Sie die Eingabeaufforderung aus und lesen Sie die Zeichen direkt. Dies ist in der tgetpass.cDatei in der sudoQuelle zu sehen.
Es gibt einige andere Szenarien:
askpassProgramm angegeben ist, z. B. im -AParameter, wird dieses Programm aufgerufen.sudodas Lesen an stdin, zB mit dem -SFlag - und es wird auch die Eingabeaufforderung an geschrieben stderr. Dies ist der Fall, in dem die Antwort von MadHatter zutrifft.ttyverfügbar ist
visiblepwFlag in gesteuert sudoers), sudowird ein Fehler gemeldet:no tty present and no askpass program specifiedsudowird auf die Nutzung zurückgegriffen stdinund dies stderrauch dann, wenn es nicht ausdrücklich angefordert wurde. Die Antwort von MadHatter gilt auch hier.Die Pipe verbindet sudo catdie Standardausgabe mit lessder Standardausgabe, sodass sudo catdie Standardausgabe nicht betroffen ist und das Kennwort empfangen kann.
Die Eingabeaufforderung erlischt auf sudo catstderr; Versuchen Sie in bash, dies zusammen mit stdout umzuleiten, indem Sie
sudo cat /etc/resolv.conf |& less
und sehen, wie unterschiedlich die Reaktion ist.
sudo‚s ist stdin noch mit dem Beispielbefehl an das Terminal angeschlossen, die nicht direkt relevant ist , wie es sein Passwort bekommt: standardmäßigsudowird fordern keine Passwörter über stdin noch zeigt es die Aufforderung überstderr- Sie kann versuchen, das2>/dev/nullzu bestätigen.sudoGreift stattdessen direkt auf das tty zu.