S-a remediat: sudo: nu există niciun tty prezent și niciun program askpass specificat



Încercați Instrumentul Nostru Pentru Eliminarea Problemelor

Linia de ieșire specificată de programul „no tty present” și „no askpass” este unul dintre acele mesaje de eroare ssh care nu sunt chiar atât de utile, deoarece nu ajunge chiar la punctul de a cauza problema. Mai mult decât probabil, lucrați de fapt cu un TTY valid de un fel când vedeți mesajul și probabil că v-ați ocupat de introducerea parolei sudo peste ssh foarte bine. Probabil că aveți de-a face cu o greșeală de sintaxă, dar mesajul nu abordează direct acest fapt.



Întrucât aceasta este o problemă asociată cu ssh în sine, cu siguranță veți putea reproduce problema pe Linux, FreeBSD, macOS și serviciile Unix ale Cygwin pe Microsoft Windows. Din fericire, soluția ar trebui să fie cam aceeași pe toate aceste platforme.



Metoda 1: Găsirea unui terminal pentru ssh

Deși probabil că lucrați deja de la un terminal, probabil că ssh nu realizează acest lucru. S-ar putea să încercați în continuare să căutați un emulator de terminal TTY, în ciuda faptului că vă aflați într-o fereastră de prompt de comandă. Încercați să reproduceți eroarea pentru a testa acest lucru. Am configurat o mașină virtuală pentru a servi ca exemplu și am rulat ssh user@linuxtest.example ‘sudo /var/mail/startup.sh’ ca test. În mod firesc, veți dori să schimbați comanda și linia ssh cu ceva care se potrivește cu ceea ce încercați să faceți.



Veți dori să vă asigurați că vă conectați la serverul pe care credeați că sunteți. Indiferent, verificați dacă primiți în continuare mesajul de eroare sudo: no tty prezent și niciun program askpass. Mai mult decât probabil, dacă îl primiți în continuare, îl veți vedea de trei ori și, eventual, vi se va solicita să introduceți parola așa cum ați avea dacă rulați sudo local pe Debian sau Ubuntu.

Încercați să adăugați -t după ssh pentru a corecta eroarea de sintaxă. De nouă ori din zece acest lucru va forța ssh să aloce un TTY virtual pentru sine și să pretindă că se întâmplă să ruleze în interiorul unui terminal real. Nu trebuie să schimbi nimic altceva în legătură cu comanda ta. Pur și simplu adăugați opțiunea -t după literele ssh și apoi păstrați comanda gazdă și a trecut la fel. Veți dori, de asemenea, să țineți cont de acest lucru dacă va trebui să rulați vreodată ssh în ultima parte a comenzii.



De exemplu, dacă primiți același tip de eroare atunci când executați o comandă care a fost formatată ca ssh -t user@linuxtest.example ‘ssh user@linuxtest2.example’ ar trebui să păstrați opțiunea -t după primul ssh pentru a o preveni. Rețineți că, dacă mai târziu ați schimbat a doua comandă pentru a produce sau consuma date, atunci nu ați dori să utilizați deloc -t. De exemplu, dacă ați început să rulați cat în loc de un script, puteți descărca -t, deoarece nu ar fi nevoie să alocați un terminal pentru asta.

Metoda 2: Corectarea fișierului visudo

Este posibil să aveți și o problemă de configurare care să producă această eroare. Modificați fișierul visudo prin emiterea fișierului sudo visudo și rețineți că nu veți dori niciodată să editați acest fișier în alt mod. Ar trebui să găsiți o linie care să conțină ALL = NOPASSWD în ea urmată de tipurile de comenzi de care nu este nevoie să introduceți parola administratorului pentru a rula.

Fiecare comandă individuală trebuie să se încheie cu o virgulă, cu excepția ultimei de pe linie. Astfel, dacă ați avut ceva care citește cum ar fi / sbin / poweroff / sbin / start / sbin / stop, le va trata pe toate ca pe o singură comandă și va arunca eroarea asupra dvs. La fel, dacă lipsește o comandă pe care încercați să o rulați prin ssh, veți primi și această eroare. Efectuați ajustările necesare și salvați fișierul înainte de a verifica dacă eroarea este încă reproductibilă.

În cazul în care aveți în continuare eroarea chiar și după ce ați făcut acest lucru și ați repornit serviciul, atunci încercați urmând comanda din imaginea de mai jos și asigurați-vă că linia PermitTTY conține cuvântul da după acesta. Dacă aceasta este ultima linie din fișier, asigurați-vă că există o nouă linie goală după aceea. GNU nano efectuează automat această sarcină în mod implicit.

Va trebui să reporniți orice servicii relevante înainte de a încerca să redați din nou mesajul de eroare.

3 minute citite