Cum de a repara 'sudo: nu tty prezent și nu askpass program specificat' de eroare?

Am încercat să alcătuiască unele surse, folosind un makefile. În makefile există o grămadă de comenzi care trebuie să fi fugit ca "sudo".

Când am compila sursele de la un terminal totul merge bine și este oprit prima dată un "sudo" comanda este fugit de așteptare pentru parola. Odată ce am tip în parola, face reia și completează.

Dar aș dori să fie capabil de a compila sursele în NetBeans. Astfel, am început un proiect și au arătat netbeans în cazul în care pentru a găsi surse, dar când am compila proiectul dă eroare:

sudo: no tty present and no askpass program specified

Prima dată când se lovește de un "sudo" comanda.

Am cautat problema pe internet și toate soluțiile găsite indică un singur lucru: dezactivarea parola pentru acest utilizator. Deoarece utilizatorul în cauză aici este rădăcina. Nu vreau să fac asta.

Există vreo altă soluție?

Comentarii la întrebare (6)

Acordarea utilizatorul să folosească comanda fara sa ceara parola ar trebui să rezolve problema. În primul rând deschideți o consolă și shell de tip:

sudo visudo

Apoi edita fișiere pentru a adăuga la final:

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

de exemplu

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

va permite utilizatorului john sudo oprit, "start" și "stop", fără a fi determinat de parola.

Uită-te la partea de jos a ecranului pentru tastatura aveți nevoie pentru a utiliza în visudo - acest lucru nu este vi prin modul în care - și ieși fără a salva de la primul semn de orice problemă. Avertisment de sănătate: coruperea acest dosar va avea consecințe grave, edita cu grijă!

Comentarii (8)

Încercați:

  1. Folosesc NOPASSWD` linie pentru toate comenzile, adică:

jenkins ALL=(ALL) NOPASSWD: ALL

  1. Pune linia după ce toate celelalte linii în sudoers de fișier.

Care a lucrat pentru mine (Ubuntu 14.04).

Comentarii (10)

Încercați:

ssh -t remotehost "sudo "

Acest lucru va elimina erorile de mai sus.

Comentarii (5)

După toate alternativele, am găsit:

sudo -S 

A -S (stdin) opțiunea de cauze sudo pentru a citi parola de la intrarea standard în loc de dispozitiv terminal.

Sursa

Comanda de mai sus mai are nevoie de parola pentru a fi introduse. Pentru a elimina introducerea parolei manual, în cazuri ca jenkins, această comandă funcționează:

echo  | sudo -S  
Comentarii (9)

"sudo" în mod implicit va citi parola de la atașat terminal. Problema ta este că nu există nici un terminal atașat atunci când este rulat din netbeans consola. Deci, trebuie să utilizați o metodă alternativă pentru a introduce parola: care este numit askpass program.

La askpass program nu este un program special, dar orice program care poate cere o parolă. De exemplu, în sistemul meu x11-ssh-askpass funcționează bine.

În scopul de a face că aveți pentru a specifica ce program sa folosesc, fie cu variabila de mediu SUDO_ASKPASS sau în sudo.conf fișier (a se vedea `man sudo pentru detalii).

Puteți forța "sudo" pentru a utiliza askpass program utilizând opțiunea -A. În mod implicit se va utiliza numai dacă nu este atașat un terminal.

Comentarii (6)

Incearca asta:

echo '' | sudo -S my_command
Comentarii (4)

Pentru Ubuntu 16.04 utilizatori

Există un fișier, trebuie să citiți cu:

cat /etc/sudoers.d/README

Plasarea unui fișier cu modul 0440 în /etc/sudoers.d/myuser cu următorul conținut:

myuser  ALL=(ALL) NOPASSWD: ALL

Ar trebui să rezolva problema.

Nu uita sa:

chmod 0440 /etc/sudoers.d/myuser
Comentarii (3)

Daca prin orice sansa ai venit aici pentru că puteți't sudo în Ubuntu, care vine cu Windows10

  1. Editați fișierul /etc/hosts din Windows (cu Notepad), l'll fi situat la: %localappdata\lxss\rootfs\etc, adaug 127.0.0.1 WINDOWS8, acest lucru va scăpa de prima eroare care se poate't găsi gazdă.

  2. Pentru a scapa de nu tty prezent eroare, face mereu sudo -S <command>

Comentarii (2)

Conectare în linux. Focul următoarele comenzi. Fii atent, ca editarea sudoer este o propunere riscantă.

$ sudo visudo

Odată ce vi se deschide editorul de a face următoarele modificări:

  1. Comentariu Defaults requiretty

Implicite requiretty

  1. Du-te la sfârșitul de fișier și adăugați

jenkins ALL=(ALL) NOPASSWD: ALL

Comentarii (0)

În Jenkins:

echo '' | sudo -S command

Exemplu:-

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

Puteți utiliza Parola Masca Plugin pentru a ascunde parola

Comentarii (1)

Aceasta a lucrat pentru mine:

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

în cazul în care dvs. de utilizator este "myuser"

pentru un Docher de imagine, care ar fi:

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

Asigurați-vă că comanda're `sudo 'ing este parte din "CALE".

Dacă aveți un singur (sau mai multe, dar nu TOATE) comanda sudoers intrare, te&#39;ll iasudo: nu tty prezent și nu askpass program specificat` în cazul în care comanda nu este parte din calea ta (și calea completă nu este specificat).

Puteți să-l repara, fie prin adăugarea de comanda la "CALE" sau o invocă cu o cale absolută, adică

sudo /usr/sbin/ipset

În loc de

sudo ipset

Comentarii (1)

Comanda "sudo" nu ca ea este încercarea de a solicita pe parola de root și nu există nici o pseudo-tty alocate (ca's parte a script-ul).

Ai nevoie să fie conectați-ca root pentru a rula această comandă sau set-up următoarele reguli în /etc/sudoers (sau: sudo visudo):

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

Apoi asigurați-vă că dvs. de utilizator aparține "admin" grup (sau "roată").

În mod ideal (mai sigur), ar fi la limita privilegii de root numai pentru anumite comenzi care pot fi specificate ca %admin ALL=(ALL) NOPASSWD:/path/to/program

Comentarii (2)

Cred că pot ajuta pe cineva cu cazul meu.

În primul rând, am schimbat setarea de utilizator în /etc/sudoers referindu-se la răspunsul de mai sus. Dar încă n't de lucru.

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

În cazul meu, myuser a fost în anii mygroup.

Și eu am't nevoie de grupuri. Deci, șters acea linie.

(Ar trebui't a șterge linia aia ca mine, doar marcajul de comentariu.)

myuser   ALL=(ALL) NOPASSWD: ALL

Acesta funcționează!

Comentarii (0)

Rularea script shell care conțin comenzi sudo în ele de la jenkins ar putea să nu ruleze cum era de așteptat. Pentru a rezolva această problemă, urmați de-a lungul

Pași simpli:

  1. Pe ubuntu bazate pe sisteme, executați " $ sudo visudo "

  2. aceasta va deschide /etc/sudoers fișier.

  3. Dacă jenkins utilizatorul este deja în acel fișier, apoi pe modificați pentru a arata ca acest lucru:

jenkins ALL=(ALL) NOPASSWD: ALL

  1. salvați fișierul

  2. Relansarea jenkins treaba

  3. tu nu vezi că mesajul de eroare din nou :)

Comentarii (0)

Am fost obtinerea această eroare pentru că a avut limitată meu de utilizator la doar un singur executabil 'systemctl' și a greșit la visudo fișier.

Aici's de ce am avut:

jenkins ALL=NOPASSWD: systemctl

Cu toate acestea, trebuie să includă calea completă către fișierul executabil, chiar dacă acesta este pe calea ta implicit, de exemplu:

jenkins ALL=NOPASSWD: /bin/systemctl

Aceasta permite mea jenkins utilizatorului pentru a reporni servicii, dar nu au acces deplin rădăcină

Comentarii (0)

Pentru referință, în cazul în care cineva se confruntă cu aceeași problemă, am fost blocat în timpul de o oră cu această eroare care nu ar trebui să se întâmple, deoarece am fost folosind NOPASSWD parametru.

Ceea ce NU știam era că sudo poate ridica exact același mesaj de eroare atunci când nu există nici tty și comanda utilizatorul încearcă să lanseze nu este parte a permis comandă în /etc/sudoers fișier.

Aici un exemplu simplificat de dosarul meu de conținut cu problema mea:

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

Când bguser va încerca pentru a lansa "sudo command_b arg_b", fără nici tty (bguser fiind folosit pentru unele daemon), atunci el va întâlni eroare "nu tty prezent și nu askpass program specificat".

De ce?

Pentru o virgula lipsește de la capătul de linie în /etc/sudoers fișier...

(Chiar mă întreb dacă acest lucru este un comportament așteptat și nu un bug în sudo deoarece mesajul de eroare corect pentru un astfel de caz ar fi "îmi pare Rău, utilizatorul bguser nu este permis să execute etc.")

Comentarii (0)

Această eroare poate apărea, de asemenea, atunci când sunteți încercarea de a rula un terminal de comandă (care necesită parola de root) de la un non-shell script, de exemplu sudo e (în backticks) dintr-un Rubin program. În acest caz, puteți folosi Aștepta utility (http://en.wikipedia.org/wiki/Expect) sau alternativele sale. De exemplu, în Ruby pentru a executa sudo e fără să `sudo: nu tty prezent și nu askpass program specificat, puteți rula acest lucru:

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

[acesta utilizează una dintre alternativele la Aștepta TCL extensie: ruby_expect gem].

Comentarii (0)

Alte opțiuni, nu se bazează pe NOPASSWD:

  • Începe Netbeans cu root privilege ((sudo netbeans) sau similar), care probabil va furculita procesul de construire cu rădăcină și astfel sudo automat va reuși.
  • Face operațiunile de care aveți nevoie pentru a face suexec -- le face deținute de rădăcină, și setați modul de 4755. (Acest lucru va, desigur, să orice utilizator de pe mașina rula pe ei.) În acest fel, ei nu't nevoie de sudo, la toate.
  • Crearea de hard disk virtual de fișiere cu bootsectors ar trebui't nevoie de sudo, la toate. Fișierele sunt doar fișiere, și bootsectors sunt doar date. Chiar mașina virtuală ar trebui't neapărat nevoie de root, daca nu faci dispozitiv avansat de expediere.
Comentarii (0)

Nimeni nu a spus ce ar putea cauza aceasta eroare, în caz de migrare de la o gazdă la alta, amintiți-vă despre verificarea gazdă în sudoers fișier:

Deci, acest lucru este meu /etc/sudoers config

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

dacă nu't de meci

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

acesta va apărea această eroare:

nu tty prezent și nu askpass program specificat

Comentarii (0)