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

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

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

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

Докато повече от вероятно вече работите от терминал, ssh вероятно не осъзнава това. Все още може да се опитва да търси TTY терминален емулатор, въпреки факта, че сте в прозореца на командния ред. Опитайте да възпроизведете грешката, за да тествате това. Конфигурирахме виртуална машина да служи като пример и стартирахме ssh [email protected] 'sudo /var/mail/startup.sh' като тест. Естествено, ще искате да промените командата и ssh реда на нещо, което съответства на това, което се опитвате да направите.

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

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

Например, ако получавате същия вид грешка при изпълнение на команда, която е форматирана като ssh -t [email protected] 'ssh [email protected]' , ще трябва да запазите опцията -t след първия ssh за предотврати го. Имайте предвид, че ако по-късно промените втората команда или да произвеждате, или да консумирате данни, тогава изобщо не бихте искали да използвате -t. Например, ако сте започнали да изпълнявате cat вместо скрипт, можете да изхвърлите -t, тъй като не е необходимо да заделяте терминал за това.

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

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

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

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

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