Коригирано: sudo: не присъства tty и не е посочена програма askpass



Опитайте Нашия Инструмент За Премахване На Проблемите

Изходният ред, който не е наличен и не е зададен от програмата Askpass, е едно от онези съобщения за грешка в ssh, които наистина не са толкова полезни, защото всъщност не стигат до точката на причината за проблема. Повече от вероятно всъщност работите с някакъв валиден TTY от някакъв вид, когато видите съобщението и вероятно сте се справили с въвеждането на вашата sudo парола през ssh много добре. Повече от вероятно имате работа със синтаксична грешка, но съобщението не адресира директно този факт.



Тъй като това е проблем, свързан със самия ssh, повече от вероятно ще можете да възпроизведете проблема на Linux, FreeBSD, macOS и услугите на Unix на Cygwin на Microsoft Windows. За щастие поправката трябва да бъде почти еднаква на всички тези платформи.



Метод 1: Намиране на терминал за ssh

Докато повече от вероятно вече работите от терминал, ssh вероятно не осъзнава това. Все още може да се опитва да търси TTY терминален емулатор, въпреки факта, че сте в прозореца на командния ред. Опитайте да възпроизведете грешката, за да тествате това. Конфигурирахме виртуална машина да служи като пример и стартирахме ssh user@linuxtest.example ‘sudo /var/mail/startup.sh’ като тест. Естествено, ще искате да промените командата и ssh реда на нещо, което съответства на това, което се опитвате да направите.



Вие ще искате да сте сигурни, че влизате в сървъра, който сте мислили, че сте. Независимо от това, проверете дали все още получавате sudo: няма tty и няма съобщение за грешка, посочено в програмата askpass Повече от вероятно, ако все още го получавате, ще го видите три пъти и евентуално дори ще бъдете подканени да въведете паролата си по начина, по който бихте имали, ако използвате sudo локално на Debian или Ubuntu.

Опитайте да добавите -t след ssh, за да коригирате вашата синтаксична грешка. Девет пъти от десет това ще принуди ssh да разпредели виртуален TTY на себе си и да се преструва, че се случва да работи вътре в реален терминал. Не е нужно да променяте нищо друго във вашата команда. Просто добавете опцията -t след буквите ssh и след това запазете същата команда хост и предадена. Също така ще искате да имате предвид това, ако някога се наложи да стартирате ssh във втората част на вашата команда.



Например, ако получавате същия вид грешка при изпълнение на команда, форматирана като ssh -t user@linuxtest.example ‘ssh user@linuxtest2.example’ ще трябва да запазите опцията -t след първия ssh, за да я предотвратите. Имайте предвид, че ако по-късно промените втората команда или да произвеждате, или да консумирате данни, тогава изобщо не бихте искали да използвате -t. Например, ако сте започнали да пускате cat вместо скрипт, можете да изхвърлите -t, тъй като не е необходимо да заделяте терминал за това.

Метод 2: Поправяне на Visudo файла

Може да имате и проблем с конфигурацията, който създава тази грешка. Променете файла visudo, като издадете sudo visudo команда и имайте предвид, че никога няма да искате да редактирате този файл по друг начин. Трябва да намерите ред, който съдържа ALL = NOPASSWD, последван от типовете команди, които не е необходимо да въвеждате паролата на администратора, за да стартирате.

Всяка отделна команда трябва да завършва със запетая, с изключение на последната на линията. По този начин, ако сте имали нещо, което чете като / sbin / poweroff / sbin / start / sbin / stop, то ще третира всичко това като една команда и ще ви изведе грешката. По същия начин, ако пропускате команда, която се опитвате да изпълните чрез ssh, ще получите и тази грешка. Направете необходимите корекции и запазете файла, преди да проверите дали грешката все още е възпроизводима.

Ако все още имате грешката, дори и след това и рестартиране на услугата, опитайте следващата команда на изображението по-долу и се уверете, че PermitTTY редът съдържа думата да след него. Ако това е последният ред във вашия файл, уверете се, че след това има празен нов ред. GNU nano изпълнява тази задача автоматично по подразбиране.

Ще трябва да рестартирате всички съответни услуги, преди да опитате отново да възпроизведете съобщението за грешка.

3 минути четене