529 Stimmen

Wie man den Fehler 'sudo: keine tty vorhanden und kein askpass Programm festgelegt' beheben kann?

Ich versuche, einige Quellen mit Hilfe eines Makefiles zu kompilieren. Im Makefile gibt es eine Reihe von Befehlen, die als sudo ausgeführt werden müssen.

Wenn ich die Quellen aus einem Terminal kompiliere, läuft alles gut und das Make wird das erste Mal angehalten, wenn ein sudo Befehl ausgeführt wird und auf das Passwort wartet. Sobald ich das Passwort eingebe, setzt das Make fort und beendet sich.

Aber ich möchte die Quellen gerne in NetBeans kompilieren. Also habe ich ein Projekt gestartet und NetBeans gezeigt, wo die Quellen zu finden sind. Wenn ich das Projekt kompiliere, erscheint allerdings folgender Fehler:

sudo: no tty present and no askpass program specified

Das passiert das erste Mal, wenn ein sudo Befehl ausgeführt wird.

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

Gibt es eine andere Lösung?

308voto

nicdaniau Punkte 3376

Das Problem kann dadurch gelöst werden, dass dem Benutzer erlaubt wird, diesen Befehl ohne Aufforderung nach einem Passwort zu verwenden. Öffnen Sie zunächst eine Shell-Konsole und geben Sie ein:

sudo visudo

Ändern Sie dann die Datei, um am Ende Folgendes hinzuzufügen:

benutzername ALLE = NOPASSWD: /vollständiger/pfad/zum/befehl, /vollständiger/pfad/zum/anderenbefehl

z. B.

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

ermöglicht dem Benutzer john, poweroff, start und stop mit sudo ohne Passwortabfrage auszuführen.

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

212voto

Fatemeh Jabbari Punkte 2215

Versuchen Sie:

  1. Verwenden Sie die NOPASSWD-Zeile für alle Befehle, das heißt:

    jenkins ALL=(ALL) NOPASSWD: ALL
  2. Platzieren Sie die Zeile nach allen anderen Zeilen in der Datei sudoers.

Das hat bei mir funktioniert (Ubuntu 14.04).

200voto

user262129 Punkte 2111

Versuche es:

ssh -t remotehost "sudo "

Dies wird die obigen Fehler entfernen.

174voto

VingtCent Punkte 1864

Nach allen Alternativen habe ich gefunden:

sudo -S 

Die -S (stdin) Option bewirkt, dass sudo das Passwort aus der Standardeingabe liest anstelle des Terminalgeräts.

Quelle

Der obige Befehl benötigt immer noch, dass das Passwort eingegeben wird. Um das manuelle Eingeben des Passworts zu entfernen, funktioniert dieser Befehl in Fällen wie jenkins:

echo  | sudo -S

50voto

rodrigo Punkte 87935

sudo liest standardmäßig das Passwort vom angeschlossenen Terminal. Ihr Problem besteht darin, dass kein Terminal angeschlossen ist, wenn es aus der Netbeans-Konsole ausgeführt wird. Sie müssen also einen alternativen Weg verwenden, um das Passwort einzugeben: das nennt sich das askpass Programm.

Das askpass Programm ist kein bestimmtes Programm, sondern jedes Programm, das nach einem Passwort fragen kann. Zum Beispiel funktioniert in meinem System x11-ssh-askpass gut.

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

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X