Виправлено: sudo: немає tty і не вказана програма askpass

Вихідний рядок no 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 виконує це завдання автоматично за замовчуванням.

Вам потрібно буде перезапустити будь-які відповідні служби, перш ніж намагатися повторно відтворити повідомлення про помилку.