Linux

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

Сообщение об ошибке «Нет tty» и «Программа askpass не указана» — это одно из тех сообщений об ошибках ssh, которые на самом деле не очень полезны, потому что они не позволяют понять, в чем причина проблемы. Более чем вероятно, что, увидев это сообщение, вы действительно работаете с каким-то TTY, и, вероятно, вы прекрасно справились с вводом пароля sudo по ssh. Более чем вероятно, что вы имеете дело с синтаксической ошибкой, но сообщение не указывает на этот факт.

Поскольку эта проблема связана с самим ssh, вы’ скорее всего, сможете воспроизвести ее на Linux, FreeBSD, macOS и Cygwin’ Unix-сервисах на Microsoft Windows. К счастью, решение проблемы должно быть практически одинаковым на всех этих платформах.

Метод 1: Поиск терминала для ssh

Хотя вы’ скорее всего, уже работаете с терминалом, ssh, вероятно, не понимает этого. Возможно, он все еще пытается найти эмулятор терминала TTY, несмотря на то, что вы находитесь в окне командной строки. Попробуйте воспроизвести ошибку, чтобы проверить это. Мы настроили виртуальную машину в качестве примера и запустили ssh user@linuxtest.пример ‘sudo /var/mail/startup.sh’ в качестве теста. Естественно, вы’ захотите изменить команду и строку ssh на что-то, что соответствует тому, что вы’ пытаетесь сделать.

Убедитесь, что вы вошли именно на тот сервер, на который рассчитывали. В любом случае, проверьте, получаете ли вы сообщение об ошибке sudo: no tty present and no askpass program specified. Скорее всего, если вы все еще получаете это сообщение, вы увидите его три раза и, возможно, даже получите запрос на ввод пароля, как если бы вы запускали sudo локально на Debian или Ubuntu.

Попробуйте добавить -t после ssh, чтобы исправить синтаксическую ошибку. В девяти случаях из десяти это заставит ssh выделить себе виртуальный TTY и притвориться, что он работает внутри настоящего терминала. Больше ничего менять в команде не нужно. Просто добавьте опцию -t после букв ssh, а затем оставьте хост и переданную команду прежними. Помните об этом и в том случае, если вам придется выполнить ssh во второй части команды.

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

Метод 2: Исправление файла visudo

У вас также может быть проблема с конфигурацией, которая приводит к этой ошибке. Измените файл visudo, выполнив команду sudo visudo Команда, и имейте в виду, что вы никогда не захотите редактировать этот файл каким-либо другим способом. Вы должны найти строку, в которой есть ALL = NOPASSWD, а затем типы команд, для выполнения которых не нужно вводить пароль администратора’.

Каждая отдельная команда должна заканчиваться запятой, кроме последней в строке. Таким образом, если у вас есть что-то, что читается как /sbin/poweroff /sbin/start /sbin/stop, он будет рассматривать все это как одну команду и выдаст вам ошибку. Аналогично, если вы’ пропустили команду, которую вы’ пытаетесь запустить через ssh, то вы’ получите эту ошибку тоже. Внесите необходимые изменения и сохраните файл, а затем проверьте, воспроизводится ли ошибка.

Если ошибка сохраняется даже после выполнения этих действий и перезапуска службы, попробуйте следующее следующую команду на изображении ниже и убедитесь, что после строки PermitTTY стоит слово yes. Если это последняя строка в вашем файле, то убедитесь, что после нее стоит пустая новая строка. GNU nano выполняет эту задачу автоматически по умолчанию.

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

Добавить комментарий