Исправлено: sudo: нет tty и не указана программа askpass



Попробуйте наш инструмент устранения неполадок

Строка вывода no tty present и no 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: no tty present и no askpass program. Скорее всего, если вы все еще получаете его, вы увидите его трижды и, возможно, даже получите запрос на ввод пароля, как если бы вы запускали 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 стоит слово yes. Если это последняя строка в вашем файле, убедитесь, что после нее есть пустая новая строка. GNU nano по умолчанию выполняет эту задачу автоматически.

Вам необходимо перезапустить все соответствующие службы, прежде чем пытаться снова воспроизвести сообщение об ошибке.

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