Opravené: sudo: nie je prítomný žiadny tty a nie je zadaný program askpass

Výstupný riadok určený pre program nopass a program askpass nie je jedným z tých chybových hlásení ssh, ktoré skutočne nie sú až také užitočné, pretože sa v skutočnosti nedostanú k tomu, čo spôsobuje problém. Je viac než pravdepodobné, že v skutočnosti pracujete s platným typom TTY, keď vidíte správu a pravdepodobne ste sa vyrovnali so zadaním hesla sudo cez ssh v pohode. Je viac než pravdepodobné, že máte do činenia s syntaktickou chybou, ale správa priamo nerieši túto skutočnosť.

Pretože sa jedná o problém spojený so samotným ssh, je viac než pravdepodobné, že ho budete môcť reprodukovať v službách Linux, FreeBSD, macOS a Cygwin Unix v systéme Microsoft Windows. Našťastie by oprava mala byť na všetkých týchto platformách takmer rovnaká.

Metóda 1: Vyhľadanie terminálu pre ssh

Aj keď s najväčšou pravdepodobnosťou už pracujete z terminálu, ssh si to pravdepodobne neuvedomuje. Možno sa stále pokúšate hľadať emulátor terminálu TTY napriek tomu, že sa nachádzate v okne príkazového riadku. Pokúste sa túto chybu zopakovať. Nakonfigurovali sme virtuálny stroj, ktorý slúži ako príklad, a spustili sme ssh užívateľ@linuxtest.example ‘sudo /var/mail/startup.sh’ ako test. Prirodzene, budete chcieť zmeniť príkazový riadok a riadok ssh na niečo, čo zodpovedá tomu, čo sa snažíte urobiť.

Budete sa chcieť ubezpečiť, že sa prihlasujete na server, o ktorom ste si mysleli, že ste. Bez ohľadu na to skontrolujte, či stále dostávate chybové hlásenie sudo: no tty present a no askpass program specified. Je viac než pravdepodobné, že ak ho stále dostávate, uvidíte ho trikrát a možno budete dokonca vyzvaní na zadanie hesla rovnakým spôsobom, ako keby ste lokálne spustili sudo na Debiane alebo Ubuntu.

Skúste pridať -t po ssh, aby ste opravili svoju syntaktickú chybu. Deväťkrát z desiatich to prinúti ssh, aby si pridelil virtuálny TTY a predstieral, že beží vo vnútri skutočného terminálu. Na svojom povele nemusíte nič meniť. Stačí pridať voľbu -t za písmená ssh a potom ponechať hostiteľa a odovzdaný príkaz rovnako. Toto budete mať na pamäti aj v prípade, že budete musieť v druhej časti svojho príkazu spustiť ssh.

Napríklad, ak sa vám pri spustení príkazu, ktorý bol naformátovaný ako, zobrazuje rovnaká chyba ssh -t [email protected] 'ssh [email protected] po prvom ssh by si musel ponechať voľbu -t, aby si tomu zabránil. Upozorňujeme, že ak ste neskôr zmenili druhý príkaz tak, aby vytváral alebo spotrebovával údaje, potom by ste už vôbec nechceli použiť -t. Napríklad, ak ste namiesto skriptu spustili mačku, môžete vypísať -t, pretože by ste na to nemuseli alokovať terminál.

Metóda 2: Oprava súboru visudo

Môžete tiež mať problém s konfiguráciou, ktorý spôsobuje túto chybu. Upravte súbor visudo vydaním súboru sudo visudo príkaz a nezabudnite, že tento súbor už nikdy nebudete chcieť inak upravovať. Mali by ste nájsť riadok, ktorý obsahuje ALL = NOPASSWD, po ktorom nasledujú typy príkazov, na spustenie ktorých nie je potrebné zadávať heslo správcu.

Každý jednotlivý príkaz musí byť zakončený čiarkou, okrem posledného v rade. Takže ak ste mali niečo, čo číta ako / sbin / poweroff / sbin / start / sbin / stop, bude to všetko považovať za jeden príkaz a chybu na vás hodí. Rovnako tak, ak vám chýba príkaz, ktorý sa pokúšate spustiť pomocou ssh, zobrazí sa vám aj táto chyba. Pred kontrolou, či je chyba stále reprodukovateľná, vykonajte potrebné úpravy a uložte súbor.

Ak by sa chyba vyskytla aj po vykonaní tohto kroku a po reštartovaní služby, vyskúšajtenasledujúci príkaz na obrázku nižšie a uistite sa, že riadok PermitTTY obsahuje slovo áno. Ak je to posledný riadok vo vašom súbore, potom skontrolujte, či je tam nový prázdny riadok. GNU nano vykonáva túto úlohu automaticky predvolene.

Skôr ako sa pokúsite znova zobraziť chybové hlásenie, musíte reštartovať všetky príslušné služby.