sudo: немає Tty присутнього та не вказано жодної програми пропуску


73

При спробі запустити віддалений двійковий код за sudoдопомогою віддаленого вікна:

ssh remotehost "sudo ./binary"

Я бачу цю помилку:

sudo: немає Tty присутнього та не вказано жодної програми пропуску

Як я можу обійти це?

EDIT це, безумовно, не дублікат запропонованого питання як такого. Відповіді там абсолютно не мають значення. Насправді, ці зміни до файлу sudoers вже були застосовані до віддаленого хоста.


Відповіді:


78

Простий спосіб - вказати -t:

ssh -t remotehost "sudo ./binary"

На чоловіковій сторінці:

Примусове виділення псевдо-тти. Це можна використовувати для виконання довільних екранних програм на віддаленій машині, що може бути дуже корисно, наприклад, при реалізації служб меню. Опції з декількома параметрами змушують розподіляти tty, навіть якщо ssh не має локальних tty.

Я не можу точно пояснити, чому це працює, і може бути кращий спосіб. Я хотів би почути про це, якщо так :)

@psusi пояснює, чому це працює в коментарі нижче.


14
Він працює тому, що sudoвимагає, щоб запросити пароль для вводу пароля, а коли вказує команди для запуску ssh, він не виділяє одну за замовчуванням, оскільки це зазвичай використовується для запуску неінтерактивних команд, які можуть передавати бінарні дані, які можуть відключати tty .
psusi

@psusi Чи знаєте ви відповідь на це пов'язане питання? unix.stackexchange.com/questions/110841
trusktr

Існує також -ttнеобхідний при передачі команди з використанням heredoc
Руфус

26

Питання:

Як я можу обійти це?

sudo: no tty present and no askpass program specified

Чергова відповідь

В якості альтернативи спробуйте:

sudo -S ./binary

Це спрямовує sudo на зчитування пароля зі стандартного вводу, stdin.

Сценарії, де це допомагає

У середовищі chroot ці інші відповіді можуть працювати неправильно ... можливо, тому що:

  1. / etc / shadow vs / etc / passwd конфлікт не дозволяє користувачеві вводити пароль.
  2. У середовищі з хротованим доступом доступ до tty1 може бути трохи глюкозним, а ctrl-alt f2 - до tty2 нездійсненним, тому що це tty середовища, яке не має хротова.

Наприклад: Вручну встановити / відремонтувати Linux або завантажувач, використовуючи середовище chroot (наприклад, Archlinux та arch-chroot).


Я отримую sudo: ./binary: команда не знайшла помилку при запуску sudo -S ./binary, що дає?
Аджит Гоел

5

Вам потрібно визначити термінал / додаток, який прочитає пароль. Є два варіанти:

  1. export SUDO_ASKPASS=/usr/libexec/openssh/ssh-askpass
  2. vim /etc/sudoers (Вибір за замовчуваннямpw)

11
Хіба не краще використовувати visudoзамість цього vim /etc/sudoers, щоб уникнути потенційного замикання з машини, через помилку в редагуванні?
Дрю Ноакс

2

Це не вдається, тому що sudoнамагається підказати пароль на пароль і не виділено псевдо-tty.

Ви повинні або увійти в систему як корінь, або налаштувати такі правила у своєму /etc/sudoers (або sudo visudo:):

# Members of the admin group may gain root privileges
%admin  ALL=(ALL) NOPASSWD:ALL

Потім переконайтесь, що ваш користувач належить до adminгрупи (або wheel).


хоча це не відповідає дійсності (доказів для цього не наводиться, і користувачі адміністративної групи з цим кодом у системах centos та ubuntu все ще отримують помилку), це чудова порада для видалення для створення груп і правил на основі цих груп для ескалація завдань
MrMesees

2

Ви також можете створити файл на зразок "sudo_shutdown" в /etc/sudoers.d із вмістом:

# Allow admins to shutdown without pass
%adm ALL=(ALL) NOPASSWD: /sbin/shutdown

Це дозволяє користувачам, які перебувають у групі адміністраторів, відключитися без пароля.


3
Чи ви мали намір відредагувати це, щоб висвітлити "немає присутніх"
Старійшина Гік

2

У моєму випадку я отримав цю помилку, оскільки не вказав команду, яку хотів би використовувати як root в судорах

Щось на зразок

/etc/sudoers.d/myuser:

myuser ALL=(root) NOPASSWD: \
    /bin/ls -la

працював на мене

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.