Wie behebe ich den Fehler 'sudo: no tty present and no askpass program Specified'

437

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 sudoBefehl 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 sudoBefehl.

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?

hebbo
quelle
3
Ich kompiliere ein Spielzeugbetriebssystem. Ich muss einige Dinge tun, um die VM einzurichten, einschließlich der Erstellung einer virtuellen Festplatte mit Bootsektor.
Hebbo
Wie in serverfault.com/a/597268 angegeben , sudo -n my-commandhat es für mich funktioniert. HIH!
Andrejewbr
1
Bitte wählen Sie eine Antwort.
Ichimaru
1
@ andreyevbr Ich glaube nicht. sudo: a password is required
Ichimaru

Antworten:

260

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:

sudo visudo

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

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

z.B

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

wird der Benutzer erlauben johnzu sudo poweroff, startund stopohne 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!

nicdaniau
quelle
4
Ja, die Sudoers-Manpage hat mir die Augen geöffnet, wie Sudo eigentlich verwendet werden soll.
Spencer Williams
6
visudo sollte sich in jedem EDITOR öffnen, für den Ihre Umgebung konfiguriert ist. Dies könnte sehr gut vi sein (und sollte ^ _ ^ sein).
Matt Styles
8
Stellen Sie sicher, dass die NOPASSWD-Rechenlinie NACH anderen übereinstimmenden Sudo-Linien (wie% Wheel) steht, die nicht das NOPASSWD-Flag haben.
Anthony
27
Ich kann nicht "sudo visudo", weil ich überhaupt nicht sudo kann!
Gubatron
8
Fügen Sie /etc/sudoers.d eine Datei hinzu und lassen Sie die visudo-Datei unberührt.
xlttj
183

Versuchen:

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

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

Das hat bei mir funktioniert (Ubuntu 14.04).

Fatemeh Jabbari
quelle
13
Ich habe die Zeile zuerst nach anderen Benutzerkonfigurationen hinzugefügt, aber es hat nur funktioniert, wenn sie als absolut letzte Zeile in der Datei auf lubuntu 14.04.1 platziert wurde.
Benutzer77115
Der zweite Teil war die Lösung, die ich brauchte. Eine vorhandene Konfigurationszeile (für Radgruppe) stimmte ebenfalls mit meinem sudo-Befehl überein, jedoch ohne den Eintrag NOPASSWD :. Platzieren meiner neuen Zeile, nachdem sie die Priorität erhalten hat, ohne dass ein Kennwort für den von mir benötigten Befehl verwendet werden darf.
Anthony
5
Wie @ user77115 erwähnt hatte, funktionierte dies nur, wenn Sie es als letzte Zeile in der sudoers-Datei platzierten, selbst mit Ubuntu 16.04. Nebenbei bemerkt ist es ein ziemlich großes Sicherheitsrisiko, Jenkins für alle Befehle Sudo-Berechtigungen zu erteilen. jenkins ALL=(ALL) NOPASSWD: /var/lib/jenkins/wrapper_script
Erwägen
jenkinsist 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?
Mrgloom
Dies ist Jenkins-spezifisch, sieht aus wie Stackoverflow.com/a/22651598/1041319 ist eine allgemeinere Lösung.
Arntg
166

Versuchen:

ssh -t remotehost "sudo <cmd>"

Dadurch werden die oben genannten Fehler behoben.

user262129
quelle
7
-t Force pseudo-tty allocation. This can be used to execute arbitrary screen-based programs on a remote machinesiehe auch: sudo-no-tty-present-and-no-askpass-Programm angegebene Auch sudo -Aermöglicht eine Einstellung sudoaskpass Programms, aber ich nur sehen GUIs. Kennt jemand einen Askpass zu erlauben ssh remotehost sudo -A askpass?
hier
1
Korrektur, das -Afür sudonimmt keine Argumente und erfordert stattdessen Umgebung SUDO_ASKPASSoder ein sudo.conf So ssh remotehost sudo -A commandwürde noch funktionieren. Immer noch neugierig auf ein terminalbasiertes Askpass-Programm.
hier
7
Dies funktioniert nicht für mich (vermutlich, weil ich ssh von einem Skript aus Pseudo-terminal will not be allocated because stdin is not a terminal.
aufrufe
Funktioniert gut für mich. Vielen Dank!
xfra35
1
Dies beantwortet die Frage nicht.
bschlueter
125

Nach allen Alternativen fand ich:

sudo -S <cmd>

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

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:

echo <password> | sudo -S <cmd> 
Vingt Cent
quelle
Dies scheint mein Problem zu beheben. Aber gibt es irgendwelche Nebenwirkungen bei der Verwendung dieses Befehls?
Xiaodong Qi
3
sudo -S <command>- ist truezufällig ein Dummy-Befehl, der einen Exit-Code von 0 falsezurückgibt ( ist ein Befehl, der 1 zurückgibt). Vielen Dank, dies ist die einzig wahre Antwort, da alle anderen erwarten, dass "sudo" funktioniert!
Adam Plocher
1
-S: Schreiben Sie die Eingabeaufforderung in den Standardfehler und lesen Sie das Kennwort von der Standardeingabe, anstatt das Endgerät zu verwenden. Dem Passwort muss ein Zeilenumbruchzeichen folgen.
Fileinster
Dies funktioniert sofort und kann dazu führen, dass sudo bis zu einer Zeitüberschreitung funktioniert, geht jedoch nicht auf die zugrunde liegenden Probleme ein, und das Problem kann erneut auftreten.
Nealmcb
Ich weiß nicht, ob es funktioniert, aber es zeigt, Password:dann passiert nichts. Ich kann das Passwort nicht eingeben.
Ichimaru
43

sudoStandardmäß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-askpassfunktioniert gut.

Dazu müssen Sie entweder mit der Umgebungsvariablen SUDO_ASKPASSoder in der sudo.confDatei angeben, welches Programm verwendet werden soll ( man sudoDetails siehe ).

sudoMit der Option können Sie die Verwendung des Askpass-Programms erzwingen -A. Standardmäßig wird es nur verwendet, wenn kein Terminal angeschlossen ist.

Rodrigo
quelle
Aktuelle Lösung erfordert eine GUI. Welches Askpass-Programm funktioniert am Terminal?
hier
@here: Nun ... wenn Sie ssh von einem Terminal aus ausführen, werden Sie direkt nach einem Passwort gefragt, Sie benötigen nichts Besonderes ... Oder Sie möchten das Passwort von einem anderen Terminal als dem anderen anfordern SSH-Sitzung ausführen?
Rodrigo
1
ahh jetzt sehe ich das -Abraucht keine argumente. -Aerfordert Umgebung SUDO_ASKPASSoder eine sudo.confDatei. In diesem Fall ssh 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 ...
hier
Es gibt einige Cavats mit der Verwendung von -A. Wenn -A verwendet wird und SUDO_ASKPASS nicht festgelegt wurde, wird zunächst eine Fehlermeldung angezeigt. Zweitens, wenn -A verwendet wird, verwendet ssh keine zwischengespeicherten Anmeldeinformationen, sondern fordert immer ein Kennwort an.
Anthony
Als Nachtrag möchten Sie vielleicht meine Notizen zu Passworteingabeprogrammen lesen
Anthony
26

Für Ubuntu 16.04 Benutzer

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

cat /etc/sudoers.d/README

Platzieren einer Datei im 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
Vasili Pascal
quelle
Nett. Sauberere Lösung als die beliebte.
Paul Praet
2
Folgen Sie dem nicht blind. Ich habe eine neue Datei in /etc/sudoers.d erstellt, wie hier beschrieben, und konnte sudo dann nicht mehr verwenden. Ich musste die Datei im Wiederherstellungsmodus löschen.
Stian
25

Probier diese:

echo '' | sudo -S my_command
sNICkerssss
quelle
Es funktioniert bei mir, aber kann jemand erklären, warum es hilft?
Ololobus
@ololobus Sie senden ein leeres Passwort an die erste Eingabeaufforderung zur Eingabe des Passworts
Nikita Koksharov
Hat funktioniert! Keine der höher bewerteten Antworten hat es für mich gelöst.
drerD
1
Es gibt folgenden Fehler zurück: [sudo] password for alper: Sorry, try again. [sudo] password for alper: sudo: 1 incorrect password attempt @sNICkerssss
alper
16

Wenn Sie zufällig hierher gekommen sind, weil Sie im Ubuntu, das mit Windows10 geliefert wird, nicht sudo können

  1. Bearbeiten Sie die Datei / etc / hosts unter Windows (mit Notepad). Sie befindet sich unter : %localappdata\lxss\rootfs\etc, add 127.0.0.1 WINDOWS8, dies beseitigt den ersten Fehler, dass der Host nicht gefunden werden kann.

  2. Um den no tty presentFehler zu beseitigen, tun Sie dies immersudo -S <command>

Gubatron
quelle
2
Vielen Dank, dass Sie eine Antwort für Personen gegeben haben, die aus einem Grund hierher gekommen sind, der nichts mit der Beschreibung der Frage zu tun hat, aber mit dem Titel der Frage übereinstimmt. +1
Jayant Bhawal
15

Loggen Sie sich in Ihr Linux ein. Feuern Sie folgende Befehle ab. Seien Sie vorsichtig, da das Bearbeiten von Sudoer ein riskantes Unterfangen ist.

$ sudo visudo

Nehmen Sie nach dem Öffnen des vi-Editors die folgenden Änderungen vor:

  1. Auskommentieren Defaults requiretty

    # Defaults    requiretty
    
  2. Gehen Sie zum Ende der Datei und fügen Sie hinzu

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

In Jenkins :

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

ZB : -

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

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

Ankit Gupta
quelle
11

Das hat bei mir funktioniert:

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

wo Ihr Benutzer "myuser" ist

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

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

Stellen Sie sicher, dass der Befehl, den Sie sudoeingeben, Teil Ihres Befehls ist PATH.

Wenn Sie einen einzelnen (oder mehrere, aber nicht ALLE) Befehlseintrag haben sudoers, erhalten Sie sudo: no tty present and no askpass program specifiedden 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 PATHoder ihn mit einem absoluten Pfad aufrufen, d. H.

sudo /usr/sbin/ipset

Anstatt

sudo ipset

Omribahumi
quelle
1
Das ist eigentlich für mich gegabelt. in sudoers %sitd ALL=(lamparna) NOPASSWD: /usr/bin/git_push_to_lamparna.sh, /usr/bin/gitund using sudo -u lamparna git push --mirror ssh://lamparna@REDMINE/home/lamparna/repos/git/jine/lamparna.gitin git nach dem Update Hook Return no tty, aber mit sudo -u lamparna /usr/bin/git push --mirror ssh://lamparna@REDMINE/home/lamparna/repos/git/jine/lamparna.gitArbeit ohne Passwort.
Foton
7

Der Befehl sudoschlä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 :) einrichten sudo visudo:

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

Stellen Sie dann sicher, dass Ihr Benutzer zur adminGruppe (oder wheel) 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

Kenorb
quelle
Ich weiß, das ist viel sicherer. Ich habe zwar den folgenden Befehl in die sudoersDatei geschrieben, apache ALL = (ALL) NOPASSWD:/usr/share/apache-tomcat-7.0.61/bin/startup.shaber 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
muaaz
1
Übrigens funktioniert es gut, apache ALL=(ALL) NOPASSWD: ALLaber ein Sicherheitsrisiko. :)
Muaaz
6

Ich denke, ich kann jemandem bei meinem Fall helfen.

Zuerst habe ich die Benutzereinstellung unter /etc/sudoersBezugnahme 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 myuserwar 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!

Kihoon Han
quelle
3

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:

  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 neu

  3. Sie sollten diese Fehlermeldung nicht wieder sehen :)

Chandra Pal
quelle
3

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:

chmod 777 filename

Schritt 2 : Überprüfen Sie, welcher Benutzer die Berechtigung zum Ausführen hat.

Schritt 3 : Terminal öffnen Geben Sie diesen Befehl ein.

sudo visudo

Fügen Sie diese Zeilen dem folgenden Code hinzu

www-data ALL=(ALL) NOPASSWD:ALL
nobody ALL=(ALL) NOPASSWD:/ALL

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

echo shell_exec('sudo -u the_user_of_the_file python your_file_name.py 2>&1');

Gehen Sie zum Terminal, um zu überprüfen, ob der Prozess ausgeführt wird. Geben Sie dies dort ein ...

ps aux | grep python

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

cut -d: -f1 /etc/passwd

Vielen Dank!

3rdi
quelle
2

Dieser Fehler kann auch auftreten, wenn Sie versuchen, einen Terminalbefehl (für den ein Root-Kennwort erforderlich ist) über ein Nicht-Shell-Skript sudo lsauszufü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 lsmöchten sudo: no tty present and no askpass program specified, ohne es zu erhalten , können Sie 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 zur Expect TCL-Erweiterung: ruby_expect gem].

Seen sind
quelle
2

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:

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

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.)

WhiteWinterWolf
quelle
2

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:

jenkins ALL=NOPASSWD: systemctl

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

jenkins ALL=NOPASSWD: /bin/systemctl

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

dannrob
quelle
1

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

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

Dieser Fehler wird angezeigt:

Kein tty vorhanden und kein Askpass-Programm angegeben

Abc Xyz
quelle
1

Andere Optionen, die nicht auf NOPASSWD basieren:

  • Starten Sie Netbeans mit Root-Rechten ((sudo netbeans) oder ähnlichem), wodurch der Build-Prozess vermutlich mit root verzweigt wird und sudo somit automatisch erfolgreich ist.
  • Führen Sie die Operationen aus, die Sie für suexec benötigen - machen Sie sie im Besitz von root und setzen Sie den Modus auf 4755. (Auf diese Weise kann natürlich jeder 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. Selbst die virtuelle Maschine sollte nicht unbedingt root benötigen, es sei denn, Sie führen eine erweiterte Geräteweiterleitung durch.
Jon Watte
quelle
1

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:

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 Nachricht von dieser Frage:

sudo: no tty present and no askpass program specified

Durch das Lesen der Antwort anderer wurde ich dazu, eine Datei /etc/sudoer.d/userauf my.server.tld zu erstellen mit:

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

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

JOduMonT
quelle
0

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@infoin /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.

u_Ltd.
quelle
0

Wenn Sie diese Zeile zu Ihrem /etc/sudoers(via visudo) hinzufügen , wird dieses Problem behoben, ohne dass Sie die Eingabe Ihres Passworts deaktivieren müssen und wenn ein Alias ​​für sudo -Snicht funktioniert (Skripte aufrufen sudo):

Defaults visiblepw

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/bashdessen ziemlich sicher ausgeführt wird, da das Kennwort nicht über ein Netzwerk gedruckt wird.

salotz
quelle
0

Pipeline verwenden:

echo your_pswd | sudo -S your_cmd

Verwenden Sie hier-Dokument:

sudo -S cmd <<eof
pwd
eof
#remember to put the above two lines without "any" indentations.

Öffnen Sie ein Terminal, um nach dem Passwort zu fragen (je nachdem, was funktioniert):

gnome-terminal -e "sudo cmd"
xterm -e "sudo cmd"
Himanshu Tanwar
quelle
-1

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.

<USERNAME> ALL=(ALL) NOPASSWD: ALL

3 Speichern und beenden Sie den Bearbeitungsmodus

Maulik Kakadiya
quelle