it-swarm.com.de

Wie behebt man den Fehler "Sudo: no tty present und kein askpass program angegeben"?

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

Wenn ich die Quellen von einem Terminal aus kompiliere, ist alles in Ordnung und die Erstellung wird angehalten, wenn zum ersten Mal ein Sudo-Befehl ausgeführt wird, der auf das Passwort wartet. Sobald ich das Passwort eingebe, mache Lebensläufe und vervollständige.

Aber ich möchte die Quellen in NetBeans zusammenstellen können. Also habe ich ein Projekt gestartet und Netbeans gezeigt, wo die Quellen zu finden sind, aber wenn ich das Projekt kompiliere, wird der Fehler angezeigt:

Sudo: no tty present and no askpass program specified

Beim ersten Aufruf eines Sudo-Befehls.

Ich habe das Problem im Internet nachgeschlagen und alle Lösungen, die ich gefunden habe, weisen auf eines hin: das Deaktivieren des Passworts für diesen Benutzer. Da ist der betreffende Benutzer hier root. Ich möchte das nicht machen.

Gibt es eine andere Lösung?

315
hebbo

Wenn Sie dem Benutzer die Erlaubnis geben, diesen Befehl zu verwenden, ohne zur Eingabe eines Kennworts aufzufordern, sollte dies das Problem beheben. Öffnen Sie zuerst eine Shell-Konsole und geben Sie Folgendes ein:

Sudo visudo

Bearbeiten Sie dann diese Datei, um sie am Ende hinzuzufügen:

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

z.B

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

erlaubt dem Benutzer john die Sudo poweroff, start und stop, ohne dass Sie zur Eingabe eines Kennworts aufgefordert werden.

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

197
nicdaniau

Versuchen:

  1. Verwenden Sie NOPASSWD für alle Befehle, ich meine:

    jenkins ALL=(ALL) NOPASSWD: ALL
    
  2. Fügen Sie die Zeile nach allen anderen Zeilen in die sudoers-Datei ein.

Das hat für mich funktioniert (Ubuntu 14.04).

143
Fatemeh Jabbari

Versuchen:

ssh -t remotehost "Sudo <cmd>"

Dadurch werden die obigen Fehler entfernt.

132
user262129

Nach allen Alternativen fand ich: 

Sudo -S <cmd>

Die Option -S (stdin) bewirkt, dass Sudo anstelle des Endgeräts das Passwort von der Standardeingabe liest.

Quelle

Für den obigen Befehl muss noch ein Kennwort eingegeben werden. Um die Eingabe des Kennworts in Fällen wie jenkins manuell zu entfernen, funktioniert dieser Befehl:

echo <password> | Sudo -S <cmd> 
84
Vingt Cent

Sudo liest standardmäßig das Passwort vom angeschlossenen Terminal. Ihr Problem ist, dass kein Terminal angeschlossen ist, wenn es von der Netbeans-Konsole aus ausgeführt wird. Sie müssen also eine alternative Methode zur Eingabe des Passworts verwenden: Dies wird als askpass program bezeichnet.

Das askpass - Programm ist kein bestimmtes Programm, sondern jedes Programm, das nach einem Passwort fragen kann. In meinem System funktioniert x11-ssh-askpass beispielsweise einwandfrei.

Dazu 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 verwenden, indem Sie die Option -A verwenden. Standardmäßig wird es nur verwendet, wenn kein Terminal angeschlossen ist.

38
rodrigo

Probier diese:

echo '' | Sudo -S my_command
20
sNICkerssss

Für Ubuntu 16.04 Benutzer 

Es gibt eine Datei, die Sie mit lesen müssen: 

cat /etc/sudoers.d/README

Platzieren einer Datei mit dem Modus 0440 in /etc/sudoers.d/myuser mit folgendem Inhalt:

myuser  ALL=(ALL) NOPASSWD: ALL

Sollte das Problem beheben. 

Vergiss nicht: 

chmod 0440 /etc/sudoers.d/myuser
15
Vasili Pascal

Wenn Sie zufällig hierher gekommen sind, können Sie Sudo nicht in Ubuntu, das mit Windows10 geliefert wird, verwenden

  1. Bearbeiten Sie die Datei/etc/hosts von Windows aus (mit Notepad). Sie finden sie unter: %localappdata\lxss\rootfs\etc, fügen Sie 127.0.0.1 WINDOWS8 hinzu. Dadurch wird der erste Fehler behoben, der den Host nicht finden kann.

  2. Um den no tty present-Fehler zu beseitigen, machen Sie immer Sudo -S <command>

15
Gubatron

Melden Sie sich in Ihrem Linux an. Befolgen Sie die folgenden Befehle. Seien Sie vorsichtig, denn das Bearbeiten von Sudoer ist ein riskantes Angebot.

$ Sudo visudo

Sobald der vi-Editor geöffnet ist, nehmen Sie folgende Änderungen vor:

  1. Defaults requiretty auskommentieren

    # Defaults    requiretty
    
  2. Zum Ende der Datei gehen und hinzufügen 

    jenkins ALL=(ALL) NOPASSWD: ALL
    
12
Susil Parida

Stellen Sie sicher, dass der Befehl Sudoing Teil Ihrer PATH ist.

Wenn Sie einen einzelnen (oder mehrere, jedoch nicht alle) Befehlseintrag sudoers haben, wird Sudo: no tty present and no askpass program specified angezeigt, wenn der Befehl nicht Teil Ihres Pfads ist (und der vollständige Pfad nicht angegeben ist).

Sie können das Problem beheben, indem Sie den Befehl entweder zu Ihrer PATH hinzufügen oder ihn mit einem absoluten Pfad aufrufen, d. H.

Sudo /usr/sbin/ipset

Anstatt

Sudo ipset

8
omribahumi

In Jenkins:

echo '<your-password>' | Sudo -S command

Z.B:-

echo '******' | Sudo -S service nginx restart

Sie können Mask Password Plugin verwenden, um Ihr Passwort auszublenden

8
Ankit Gupta

Das hat für mich funktioniert:

echo "myuser ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers

wo ist dein Benutzer "myuser"

für ein Docker-Image wäre das nur:

RUN echo "myuser ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
7
Alexander Mills

Der Befehl Sudo schlägt fehl, da versucht wird, das Root-Passwort abzufragen, und es ist keine Pseudo-Identität zugewiesen (da sie Teil des Skripts ist).

Sie müssen sich entweder als root anmelden, um diesen Befehl auszuführen, oder die folgenden Regeln in Ihrem /etc/sudoers (oder: Sudo visudo) einrichten:

# Members of the admin group may gain root privileges.
%admin  ALL=(ALL) NOPASSWD:ALL

Stellen Sie dann sicher, dass Ihr Benutzer zur admin-Gruppe (oder wheel) gehört.

Idealerweise (sicherer) wäre es, Root-Berechtigungen nur auf bestimmte Befehle zu beschränken, die als %admin ALL=(ALL) NOPASSWD:/path/to/program angegeben werden können.

5
kenorb

Das Ausführen von Shell-Skripts, die Sudo-Befehle von jenkins enthalten, wird möglicherweise nicht wie erwartet ausgeführt. Folgen Sie diesen Anweisungen, um das Problem zu beheben

Einfache schritte:

  1. Führen Sie auf Ubuntu-basierten Systemen "$ Sudo visudo" aus.

  2. dadurch wird die Datei/etc/sudoers geöffnet.

  3. Wenn sich Ihr jenkins-Benutzer bereits in dieser Datei befindet, ändern Sie ihn wie folgt:

jenkins ALL = (ALL) NOPASSWD: ALL

  1. speicher die Datei

  2. Starten Sie Ihren Jenkins-Job erneut 

  3. sie sollten diese Fehlermeldung nicht noch einmal sehen :)

2
Chandra Pal

Für den Hinweis, dass jemand anderes auf dasselbe Problem stößt, war ich während einer guten Stunde mit diesem Fehler stecken geblieben, der nicht auftreten sollte, da ich den Parameter NOPASSWD verwendet habe.

Was ich NICHT wusste, war, dass Sudo möglicherweise dieselbe Fehlermeldung ausgibt, wenn es kein tty gibt und der Befehl, den der Benutzer zu starten versucht, nicht Teil des erlaubten Befehls in der Datei/etc/sudoers ist.

Hier ein vereinfachtes Beispiel meines Dateiinhalts mit meiner Ausgabe:

bguser ALL = NOPASSWD: \
    command_a arg_a, \
    command_b arg_b \
    command_c arg_c

Wenn bguser versucht, "Sudo command_b arg_b" zu starten, ohne dass tty (bguser wird für einen Dämon verwendet wird), wird der Fehler "no tty present und kein askpass-Programm angegeben" angezeigt.

Warum?

Da am Ende der Zeile in der Datei/etc/sudoers ein Komma fehlt ...

(Ich frage mich sogar, ob dies ein erwartetes Verhalten und kein Fehler in Sudo ist, da die richtige Fehlermeldung für diesen Fall lauten sollte "Tut mir leid, Benutzer bguser darf nicht ausführen usw.")

1
WhiteWinterWolf

Ich glaube, ich kann jemandem mit meinem Fall helfen.

Zuerst habe ich die Benutzereinstellung in /etc/sudoers in Bezug auf die obige Antwort geändert. Aber es hat immer noch nicht funktioniert. 

myuser   ALL=(ALL) NOPASSWD: ALL
%mygroup  ALL=(ALL:ALL) ALL

In meinem Fall befand sich myuser in der mygroup.

Und ich brauchte keine Gruppen. Also diese Zeile gelöscht.

(Sollte diese Zeile nicht wie ich löschen, sondern nur den Kommentar markieren.)

myuser   ALL=(ALL) NOPASSWD: ALL

Es klappt!

1
kihoon han

Dieser Fehler kann auch auftreten, wenn Sie versuchen, einen Terminalbefehl (der ein Root-Kennwort erfordert) von einem Nicht-Shell-Skript aus auszuführen, z. B. Sudo ls (in Backticks) von einem Ruby-Programm. In diesem Fall können Sie das Expect - Dienstprogramm ( http://en.wikipedia.org/wiki/Expect ) oder dessen Alternativen verwenden.
In Ruby können Sie beispielsweise Sudo ls ausführen, ohne Sudo: no tty present and no askpass program specified zu erhalten. Sie können Folgendes ausführen:

require 'Ruby_expect'

exp = RubyExpect::Expect.spawn('Sudo ls', :debug => true)
exp.procedure do
    each do
        expect "[Sudo] password for _your_username_:" do
            send _your_password_
        end
    end
end

[Dies verwendet eine der Alternativen zu Expect TCL-Erweiterung: Ruby_expect gem].

1
lakesare

Ich habe diese Fehlermeldung erhalten, weil ich meinen Benutzer auf eine einzige ausführbare Datei 'systemctl' beschränkt hatte und die visudo-Datei falsch konfiguriert hatte.

Folgendes hatte ich: 

jenkins ALL=NOPASSWD: systemctl

Sie müssen jedoch den vollständigen Pfad zur ausführbaren Datei angeben, auch wenn diese standardmäßig in Ihrem Pfad enthalten ist. Beispiel:

jenkins ALL=NOPASSWD: /bin/systemctl

Dadurch kann mein jenkins-Benutzer Dienste neu starten, hat jedoch keinen vollständigen Root-Zugriff

1
dannrob

Obwohl diese Frage alt ist, ist sie für mein mehr oder weniger aktuelles System immer noch relevant. Nachdem ich den Debug-Modus von Sudo (Debug Sudo /var/log/Sudo_debug [email protected] in /etc/Sudo.conf) aktiviert hatte, wurde ich auf/dev: "/dev is world writable" verwiesen. Daher müssen Sie möglicherweise überprüfen Sie die tty-Dateiberechtigungen, insbesondere die des Verzeichnisses, in dem sich der tty/pts-Knoten befindet.

0
u_Ltd.

Niemand hat gesagt, was diesen Fehler verursachen könnte. Denken Sie bei der Migration von einem Host zu einem anderen daran, den Hostnamen in der sudoers-Datei zu überprüfen:

Das ist also meine/etc/sudoers config

User_Alias      POWERUSER = user_name
Cmnd_Alias SKILL = /root/bin/Sudo_auth_wrapper.sh
POWERUSER hostname=(root:root) NOPASSWD: SKILL

wenn es nicht passt

uname -a
Linux other_hostname 3.10.17 #1 SMP Wed Oct 23 16:28:33 CDT 2013 x86_64 Intel(R) Core(TM) i3-4130T CPU @ 2.90GHz GenuineIntel GNU/Linux

es wird dieser Fehler auftauchen:

kein tty vorhanden und kein askpass-Programm angegeben

0
Abc Xyz

Vielleicht ist die Frage unklar, warum keine Antwort übereinstimmt Ich hatte jedoch die gleiche Fehlermeldung, als ich versuchte, sshfs zu mounten, was Sudo erforderte:

sshfs -o sftp_server="/usr/bin/Sudo /usr/lib/openssh/sftp-server" [email protected]:/var/www /mnt/sshfs/www

durch Hinzufügen der Option -o debug

sshfs -o debug -o sftp_server="/usr/bin/Sudo /usr/lib/openssh/sftp-server" [email protected]:/var/www /mnt/sshfs/www

Ich hatte die gleiche Botschaft dieser Frage:

Sudo: no tty present and no askpass program specified

Indem ich die Antwort von anderen las, wurde ich in /etc/sudoer.d/user auf my.server.tld mit:

user ALL=NOPASSWD: /usr/lib/openssh/sftp-server

und jetzt kann ich das Laufwerk montieren, ohne meinem Benutzer zu viel zusätzliches Recht zu geben.

0
JOduMonT

Andere Optionen, die nicht auf NOPASSWD basieren:

  • Starten Sie Netbeans mit Root-Rechten ((Sudo-Netbeans) oder ähnlichem), was vermutlich den Build-Prozess mit root auslöst und Sudo automatisch erfolgreich macht.
  • Führen Sie die Vorgänge aus, die Sie für suexec benötigen - machen Sie sie zu root und setzen Sie den Modus auf 4755. (Damit können natürlich alle Benutzer auf dem Computer sie ausführen.) Auf diese Weise benötigen sie überhaupt kein Sudo.
  • Das Erstellen von virtuellen Festplattendateien mit Bootsektoren sollte überhaupt kein Sudo erfordern. Dateien sind nur Dateien und Bootsektoren sind nur Daten. Sogar die virtuelle Maschine muss nicht unbedingt root sein, es sei denn, Sie führen eine erweiterte Geräteweiterleitung durch.
0
Jon Watte