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?
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:
Apoi edita fișiere pentru a adăuga la final:
de exemplu
va permite utilizatorului
john
sudooprit
, "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ă!
Încercați:
jenkins ALL=(ALL) NOPASSWD: ALL
sudoers
de fișier.Care a lucrat pentru mine (Ubuntu 14.04).
Încercați:
Acest lucru va elimina erorile de mai sus.
După toate alternativele, am găsit:
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ă:
"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 însudo.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.Incearca asta:
Pentru Ubuntu 16.04 utilizatori
Există un fișier, trebuie să citiți cu:
Plasarea unui fișier cu modul 0440 în /etc/sudoers.d/myuser cu următorul conținut:
Ar trebui să rezolva problema.
Nu uita sa:
Daca prin orice sansa ai venit aici pentru că puteți't sudo în Ubuntu, care vine cu Windows10
Editați fișierul /etc/hosts din Windows (cu Notepad), l'll fi situat la:
%localappdata\lxss\rootfs\etc
, adaug127.0.0.1 WINDOWS8
, acest lucru va scăpa de prima eroare care se poate't găsi gazdă.Pentru a scapa de
nu tty prezent
eroare, face mereusudo -S <command>
Conectare în linux. Focul următoarele comenzi. Fii atent, ca editarea sudoer este o propunere riscantă.
Odată ce vi se deschide editorul de a face următoarele modificări:
Defaults requiretty
Implicite requiretty
jenkins ALL=(ALL) NOPASSWD: ALL
În Jenkins:
Exemplu:-
Puteți utiliza Parola Masca Plugin pentru a ascunde parola
Aceasta a lucrat pentru mine:
în cazul în care dvs. de utilizator este "myuser"
pentru un Docher de imagine, care ar fi:
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'll ia
sudo: 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
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
):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
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.În cazul meu,
myuser
a fost în aniimygroup
.Și eu am't nevoie de grupuri. Deci, șters acea linie.
(Ar trebui't a șterge linia aia ca mine, doar marcajul de comentariu.)
Acesta funcționează!
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:
Pe ubuntu bazate pe sisteme, executați " $ sudo visudo "
aceasta va deschide /etc/sudoers fișier.
Dacă jenkins utilizatorul este deja în acel fișier, apoi pe modificați pentru a arata ca acest lucru:
salvați fișierul
Relansarea jenkins treaba
tu nu vezi că mesajul de eroare din nou :)
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:
Cu toate acestea, trebuie să includă calea completă către fișierul executabil, chiar dacă acesta este pe calea ta implicit, de exemplu:
Aceasta permite mea jenkins utilizatorului pentru a reporni servicii, dar nu au acces deplin rădăcină
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:
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.")
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 executasudo e
fără să `sudo: nu tty prezent și nu askpass program specificat, puteți rula acest lucru:[acesta utilizează una dintre alternativele la Aștepta TCL extensie: ruby_expect gem].
Alte opțiuni, nu se bazează pe NOPASSWD:
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
dacă nu't de meci
acesta va apărea această eroare: