Wie behebt man den Fehler 'sudo: kein tty vorhanden und kein askpass-Programm angegeben'?

Ich versuche, einige Quellen mit einem Makefile zu kompilieren. In dem Makefile gibt es eine Reihe von Befehlen, die als sudo ausgeführt werden müssen.

Wenn ich die Quellen von einem Terminal aus kompiliere, geht alles gut und make wird beim ersten Mal, wenn ein sudo-Befehl ausgeführt wird, angehalten und wartet auf das Passwort. Sobald ich das Passwort eingebe, wird make fortgesetzt und fertiggestellt.

Aber ich möchte die Quellen in NetBeans kompilieren können. Also habe ich ein Projekt gestartet und Netbeans gezeigt, wo die Quellen zu finden sind, aber wenn ich das Projekt kompiliere, gibt es den Fehler:

sudo: no tty present and no askpass program specified

Das erste Mal, dass es auf einen sudo-Befehl trifft.

Ich habe das Problem im Internet nachgeschlagen und alle Lösungen, die ich gefunden habe, deuten auf eine Sache hin: Deaktivierung des Passworts für diesen Benutzer. Da es sich hier um den Benutzer root handelt. Ich möchte das nicht tun.

Gibt es eine andere Lösung?

Wenn Sie dem Benutzer die Verwendung dieses Befehls ohne Kennwortabfrage gestatten, sollte das Problem behoben sein. Öffnen Sie zunächst eine Shell-Konsole und geben Sie ein:

sudo visudo

Bearbeiten Sie dann die Datei und fügen Sie ganz am Ende hinzu:

username ALL = NOPASSWD: /fullpath/to/command, /fullpath/to/othercommand

z.B.

john ALL = NOPASSWD: /sbin/poweroff, /sbin/start, /sbin/stop

erlaubt dem Benutzer john sudo poweroff, start und stop, ohne nach dem Passwort gefragt zu werden.

Schauen Sie am unteren Rand des Bildschirms nach den Tastenkombinationen, die Sie in visudo verwenden müssen - dies ist übrigens nicht vi - und beenden Sie das Programm beim ersten Anzeichen eines Problems ohne zu speichern. Gesundheitswarnung: Die Beschädigung dieser Datei hat schwerwiegende Folgen, bearbeiten Sie sie mit Vorsicht!

Kommentare (8)

Versuchen Sie es:

ssh -t remotehost "sudo "

Damit werden die oben genannten Fehler behoben.

Kommentare (5)

Standardmäßig liest sudo das Passwort aus dem angeschlossenen Terminal. Ihr Problem ist, dass kein Terminal angeschlossen ist, wenn es von der netbeans-Konsole aus ausgeführt wird. Daher müssen Sie eine alternative Methode zur Eingabe des Passworts verwenden: das Programm askpass.

Das askpass-Programm ist kein spezielles Programm, sondern jedes Programm, das nach einem Passwort fragen kann. In meinem System funktioniert zum Beispiel x11-ssh-askpass.

Um das zu tun, müssen Sie angeben, welches Programm verwendet werden soll, entweder mit der Umgebungsvariablen SUDO_ASKPASS oder in der Datei sudo.conf (siehe man sudo für Details).

Sie können sudo zwingen, das askpass-Programm zu benutzen, indem Sie die Option -A benutzen. Standardmäßig wird es nur verwendet, wenn kein Terminal angeschlossen ist.

Kommentare (6)