Ich versuche, einige Quellen mit einem Makefile zu kompilieren. Im Makefile gibt es eine Reihe von Befehlen, als die ausgeführt werden müssen sudo
.
Wenn ich die Quellen von einem Terminal kompiliere, geht alles in Ordnung und das Make wird angehalten, wenn zum ersten Mal ein sudo
Befehl ausgeführt wird, der auf das Passwort wartet. Sobald ich das Passwort eingegeben habe, mache ich einen Lebenslauf und vervollständige ihn.
Aber ich möchte in der Lage sein, die Quellen in NetBeans zu kompilieren. 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 trifft es einen sudo
Befehl.
Ich habe das Problem im Internet nachgeschlagen und alle Lösungen, die ich gefunden habe, weisen auf eines hin: Deaktivieren des Kennworts für diesen Benutzer. Da der fragliche Benutzer hier root ist. Ich möchte das nicht machen.
Gibt es eine andere Lösung?
sudo -n my-command
hat es für mich funktioniert. HIH!sudo: a password is required
Antworten:
Wenn Sie dem Benutzer die Verwendung dieses Befehls ohne Eingabe eines Kennworts gewähren, sollte das Problem behoben sein. Öffnen Sie zuerst eine Shell-Konsole und geben Sie Folgendes ein:
Bearbeiten Sie dann diese Datei, um sie bis zum Ende hinzuzufügen:
z.B
wird der Benutzer erlauben
john
zu sudopoweroff
,start
undstop
ohne Passwort gefragt zu werden.Suchen Sie am unteren Bildschirmrand 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: Eine Beschädigung dieser Datei hat schwerwiegende Folgen. Vorsichtig bearbeiten!
quelle
Versuchen:
Verwenden Sie
NOPASSWD
Zeile für alle Befehle, ich meine:Fügen Sie die Zeile nach allen anderen Zeilen in die
sudoers
Datei ein.Das hat bei mir funktioniert (Ubuntu 14.04).
quelle
jenkins ALL=(ALL) NOPASSWD: /var/lib/jenkins/wrapper_script
jenkins
ist nur ein Benutzername? Es muss der Benutzername des Benutzers vom Host-Computer sein? Was passiert, wenn der Benutzername auf dem Hostcomputer mit dem Benutzernamen vom Remote-Server übereinstimmt?Versuchen:
Dadurch werden die oben genannten Fehler behoben.
quelle
-t Force pseudo-tty allocation. This can be used to execute arbitrary screen-based programs on a remote machine
siehe auch: sudo-no-tty-present-and-no-askpass-Programm angegebene Auchsudo -A
ermöglicht eine Einstellungsudo
askpass Programms, aber ich nur sehen GUIs. Kennt jemand einen Askpass zu erlaubenssh remotehost sudo -A askpass
?-A
fürsudo
nimmt keine Argumente und erfordert stattdessen UmgebungSUDO_ASKPASS
oder einsudo.conf
Sossh remotehost sudo -A command
würde noch funktionieren. Immer noch neugierig auf ein terminalbasiertes Askpass-Programm.Pseudo-terminal will not be allocated because stdin is not a terminal.
Nach allen Alternativen fand ich:
Quelle
Für den obigen Befehl muss noch ein Passwort eingegeben werden. Um die manuelle Eingabe des Passworts in Fällen wie Jenkins zu entfernen, funktioniert dieser Befehl wie folgt:
quelle
sudo -S <command>
- isttrue
zufällig ein Dummy-Befehl, der einen Exit-Code von 0false
zurückgibt ( ist ein Befehl, der 1 zurückgibt). Vielen Dank, dies ist die einzig wahre Antwort, da alle anderen erwarten, dass "sudo" funktioniert!Password:
dann passiert nichts. Ich kann das Passwort nicht eingeben.sudo
Standardmäßig wird das Kennwort vom angeschlossenen Terminal gelesen. Ihr Problem ist, dass kein Terminal angeschlossen ist, wenn es von der NetBeans-Konsole ausgeführt wird. Sie müssen also eine alternative Methode zur Eingabe des Kennworts verwenden: das sogenannte askpass- Programm.Das askpass- Programm ist kein bestimmtes Programm, sondern jedes Programm, das nach einem Passwort fragen kann. Zum Beispiel in meinem System
x11-ssh-askpass
funktioniert gut.Dazu müssen Sie entweder mit der Umgebungsvariablen
SUDO_ASKPASS
oder in dersudo.conf
Datei angeben, welches Programm verwendet werden soll (man sudo
Details siehe ).sudo
Mit der Option können Sie die Verwendung des Askpass-Programms erzwingen-A
. Standardmäßig wird es nur verwendet, wenn kein Terminal angeschlossen ist.quelle
-A
braucht keine argumente.-A
erfordert UmgebungSUDO_ASKPASS
oder einesudo.conf
Datei. In diesem Fallssh host "export SUDO_ASKPASS=askpass;sudo -A cat /etc/passwd"
würde immer noch mit einem terminalbasierten Askpass funktionieren, jedoch ist @chandru unten weitaus prägnanter mitssh -t ...
Für Ubuntu 16.04 Benutzer
Es gibt eine Datei, mit der Sie lesen müssen:
Platzieren einer Datei im Modus 0440 in /etc/sudoers.d/myuser mit folgendem Inhalt:
Sollte das Problem beheben.
Vergiss nicht:
quelle
Probier diese:
quelle
[sudo] password for alper: Sorry, try again. [sudo] password for alper: sudo: 1 incorrect password attempt
@sNICkerssssWenn Sie zufällig hierher gekommen sind, weil Sie im Ubuntu, das mit Windows10 geliefert wird, nicht sudo können
Bearbeiten Sie die Datei / etc / hosts unter Windows (mit Notepad). Sie befindet sich unter :
%localappdata\lxss\rootfs\etc
, add127.0.0.1 WINDOWS8
, dies beseitigt den ersten Fehler, dass der Host nicht gefunden werden kann.Um den
no tty present
Fehler zu beseitigen, tun Sie dies immersudo -S <command>
quelle
Loggen Sie sich in Ihr Linux ein. Feuern Sie folgende Befehle ab. Seien Sie vorsichtig, da das Bearbeiten von Sudoer ein riskantes Unterfangen ist.
Nehmen Sie nach dem Öffnen des vi-Editors die folgenden Änderungen vor:
Auskommentieren
Defaults requiretty
Gehen Sie zum Ende der Datei und fügen Sie hinzu
quelle
In Jenkins :
ZB : -
Sie können das Mask Password Plugin verwenden , um Ihr Passwort auszublenden
quelle
Das hat bei mir funktioniert:
wo Ihr Benutzer "myuser" ist
Für ein Docker-Image wäre das nur:
quelle
Stellen Sie sicher, dass der Befehl, den Sie
sudo
eingeben, Teil Ihres Befehls istPATH
.Wenn Sie einen einzelnen (oder mehrere, aber nicht ALLE) Befehlseintrag haben
sudoers
, erhalten Siesudo: no tty present and no askpass program specified
den Befehl, wenn der Befehl nicht Teil Ihres Pfads ist (und der vollständige Pfad nicht angegeben ist).Sie können das Problem beheben, indem Sie entweder den Befehl zu Ihrem hinzufügen
PATH
oder ihn mit einem absoluten Pfad aufrufen, d. H.sudo /usr/sbin/ipset
Anstatt
sudo ipset
quelle
sudoers
%sitd ALL=(lamparna) NOPASSWD: /usr/bin/git_push_to_lamparna.sh, /usr/bin/git
und usingsudo -u lamparna git push --mirror ssh://lamparna@REDMINE/home/lamparna/repos/git/jine/lamparna.git
in git nach dem Update Hook Returnno tty
, aber mitsudo -u lamparna /usr/bin/git push --mirror ssh://lamparna@REDMINE/home/lamparna/repos/git/jine/lamparna.git
Arbeit ohne Passwort.Der Befehl
sudo
schlägt fehl, da versucht wird, das Root-Kennwort einzugeben, und es ist kein Pseudo-tty zugewiesen (da es 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 :) einrichtensudo visudo
:Stellen Sie dann sicher, dass Ihr Benutzer zur
admin
Gruppe (oderwheel
) gehört.Idealerweise (sicherer) wäre es, Root-Berechtigungen nur auf bestimmte Befehle zu beschränken, die als angegeben werden können
%admin ALL=(ALL) NOPASSWD:/path/to/program
quelle
sudoers
Datei geschrieben,apache ALL = (ALL) NOPASSWD:/usr/share/apache-tomcat-7.0.61/bin/startup.sh
aber er funktioniert bei mir nicht. es gibt den folgenden Fehlersudo: >>> /etc/sudoers: syntax error near line 120 <<< sudo: parse error in /etc/sudoers near line 120 sudo: no valid sudoers sources found, quitting sudo: unable to initialize policy plugin
apache ALL=(ALL) NOPASSWD: ALL
aber ein Sicherheitsrisiko. :)Ich denke, ich kann jemandem bei meinem Fall helfen.
Zuerst habe ich die Benutzereinstellung unter
/etc/sudoers
Bezugnahme auf die obige Antwort geändert . Aber es hat immer noch nicht funktioniert.In meinem Fall
myuser
war in dermygroup
.Und ich brauchte keine Gruppen. Also, diese Zeile gelöscht.
(Sollte diese Zeile nicht wie ich löschen, sondern nur den Kommentar markieren.)
Es klappt!
quelle
Das Ausführen von Shell-Skripten, die Sudo-Befehle von Jenkins enthalten, wird möglicherweise nicht wie erwartet ausgeführt. Um dies zu beheben, folgen Sie den Anweisungen
Einfache Schritte:
Führen Sie auf Ubuntu-basierten Systemen "$ sudo visudo" aus.
Dadurch wird die Datei / etc / sudoers geöffnet.
Speicher die Datei
Starten Sie Ihren Jenkins-Job neu
Sie sollten diese Fehlermeldung nicht wieder sehen :)
quelle
Ich konnte dies erledigen, aber bitte stellen Sie sicher, dass Sie die Schritte ordnungsgemäß ausführen. Dies ist für alle, die Importfehler erhalten.
Schritt 1 : Überprüfen Sie, ob Dateien und Ordner ein Problem mit der Ausführungsberechtigung haben. Linux-Benutzer verwenden:
Schritt 2 : Überprüfen Sie, welcher Benutzer die Berechtigung zum Ausführen hat.
Schritt 3 : Terminal öffnen Geben Sie diesen Befehl ein.
Fügen Sie diese Zeilen dem folgenden Code hinzu
Hiermit wird die Berechtigung zum Ausführen des Skripts erteilt und die Verwendung aller Bibliotheken ermöglicht. Der Benutzer ist im Allgemeinen "niemand" oder "www-Daten".
Bearbeiten Sie jetzt Ihren Code als
Gehen Sie zum Terminal, um zu überprüfen, ob der Prozess ausgeführt wird. Geben Sie dies dort ein ...
Dadurch wird der gesamte in Python ausgeführte Prozess ausgegeben.
Add-Ons : Verwenden Sie den folgenden Code, um die Benutzer in Ihrem System zu überprüfen
Vielen Dank!
quelle
Dieser Fehler kann auch auftreten, wenn Sie versuchen, einen Terminalbefehl (für den ein Root-Kennwort erforderlich ist) über ein Nicht-Shell-Skript
sudo ls
auszuführen , z. B. (in Backticks) über ein Ruby-Programm. In diesem Fall können Sie das Dienstprogramm Expect ( http://en.wikipedia.org/wiki/Expect ) oder dessen Alternativen verwenden.Wenn Sie beispielsweise in Ruby ausführen
sudo ls
möchtensudo: no tty present and no askpass program specified
, ohne es zu erhalten , können Sie Folgendes ausführen:[Dies verwendet eine der Alternativen zur Expect TCL-Erweiterung: ruby_expect gem].
quelle
Für den Fall, dass jemand anderes auf dasselbe Problem stößt, war ich während einer guten Stunde mit diesem Fehler festgefahren, der nicht auftreten sollte, da ich den Parameter NOPASSWD verwendet habe.
Was ich NICHT wusste, war, dass sudo möglicherweise genau dieselbe Fehlermeldung auslöst, wenn kein tty vorhanden ist und der Befehl, den der Benutzer zu starten versucht, nicht Teil des zulässigen Befehls in der Datei / etc / sudoers ist.
Hier ein vereinfachtes Beispiel für meinen Dateiinhalt mit meinem Problem:
Wenn bguser versucht, "sudo command_b arg_b" ohne tty zu starten (bguser wird für einen Daemon verwendet), wird der Fehler "no tty vorhanden und kein askpass-Programm angegeben" angezeigt.
Warum?
Weil 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 korrekte Fehlermeldung für einen solchen Fall "Sorry, Benutzer bguser darf nicht ausführen usw." lauten sollte.)
quelle
Ich erhielt diesen Fehler, weil ich meinen Benutzer auf nur eine einzige ausführbare 'systemctl' beschränkt und die visudo-Datei falsch konfiguriert hatte.
Folgendes hatte ich:
Sie müssen jedoch den vollständigen Pfad zur ausführbaren Datei angeben, auch wenn dieser standardmäßig in Ihrem Pfad enthalten ist. Beispiel:
Dadurch kann mein Jenkins-Benutzer die Dienste neu starten, hat jedoch keinen vollständigen Root-Zugriff
quelle
Niemand hat gesagt, was diesen Fehler verursachen könnte. Denken Sie bei der Migration von einem Host auf einen anderen daran, den Hostnamen in der sudoers-Datei zu überprüfen:
Das ist also meine / etc / sudoers Konfiguration
wenn es nicht passt
Dieser Fehler wird angezeigt:
quelle
Andere Optionen, die nicht auf NOPASSWD basieren:
quelle
Vielleicht ist die Frage unklar, warum keine Antwort mit ihr übereinstimmte, aber ich hatte die gleiche Fehlermeldung, als ich versuchte, sshfs zu mounten, für die sudo erforderlich war: Der Befehl lautet ungefähr so:
durch Hinzufügen der Option
-o debug
Ich hatte die gleiche Nachricht von dieser Frage:
Durch das Lesen der Antwort anderer wurde ich dazu, eine Datei
/etc/sudoer.d/user
auf my.server.tld zu erstellen mit:und jetzt kann ich das Laufwerk mounten, ohne meinem Benutzer zu viel zusätzliches Recht zu geben.
quelle
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 all@info
in/etc/sudo.conf
) aktiviert hatte, wurde ich auf / dev verwiesen: "/dev is world writable
". Daher müssen Sie möglicherweise die Berechtigungen für die tty-Datei überprüfen , insbesondere die des Verzeichnisses, in dem sich der Knoten tty / pts befindet.quelle
Wenn Sie diese Zeile zu Ihrem
/etc/sudoers
(viavisudo
) hinzufügen , wird dieses Problem behoben, ohne dass Sie die Eingabe Ihres Passworts deaktivieren müssen und wenn ein Alias fürsudo -S
nicht funktioniert (Skripte aufrufensudo
):Natürlich lesen Sie das Handbuch selbst, um es zu verstehen, aber ich denke für meinen Anwendungsfall, dass es in einem LXD-Container über
lxc exec instance -- /bin/bash
dessen ziemlich sicher ausgeführt wird, da das Kennwort nicht über ein Netzwerk gedruckt wird.quelle
Pipeline verwenden:
Verwenden Sie hier-Dokument:
Öffnen Sie ein Terminal, um nach dem Passwort zu fragen (je nachdem, was funktioniert):
quelle
1 offene / etc / sudoers
Typ
sudo vi /etc/sudoers
. Dadurch wird Ihre Datei im Bearbeitungsmodus geöffnet.2 Linux-Benutzer hinzufügen / ändern
Suchen Sie nach dem Eintrag für Linux-Benutzer. Ändern Sie wie folgt, wenn Sie gefunden wurden, oder fügen Sie eine neue Zeile hinzu.
3 Speichern und beenden Sie den Bearbeitungsmodus
quelle