у меня есть беспарольный доступ к серверу. Моя учетная запись добавлена в sudoers файл для NOPASSWD использование некоторых сервисов / демонов в /etc/init.d/.
Я хочу написать сценарий для запуска или остановки демона по результатам некоторых тестов. Я установил cron для запуска этого скрипта в определенное время. Но он возвращает ошибку «sudo: нет tty и не указана программа askpass».
Я могу использовать имя sudo /etc/init.d/service start / stop без пароля в терминале. У меня нет пароля root.
Я дважды проверил файл / etc / sudoers. Нет никаких требований. Я использую Ubuntu-10.04, 2.6.32-24-generic.
Ниже приведены активные строки в sudoers:
Defaults env_reset
root ALL=(ALL) ALL
bijo ALL=NOPASSWD: /etc/init.d/apache2
%sudo ALL=(ALL) ALL
%admin ALL=(ALL) ALL
Если вы запускаете скрипт от имени того же пользователя, что и тот, у которого нет доступа по паролю, тогда он должен работать правильно, я бы убедился, что скрипт запущен от имени правильного пользователя, я бы также протестировал скрипт, вручную вызвав его как правильный пользователь.
Вам также может потребоваться проверить, что следующая строка не существует в файле sudoers или что у вас есть дополнительная строка, в которой говорится, что вашему пользователю не требуется TTY
Defaults requiretty
если эта строка присутствует, вы можете либо закомментировать ее (не очень хорошая идея), вероятно, лучше добавить следующее в
Defaults:<USERNAME> !requiretty
где USERNAME - ваш пользователь
Это сообщение с жалобой исходит из части кода, который запрашивает пароль, поэтому он жалуется, потому что без tty он не может отключить эхо. Вы можете доказать себе, что находитесь на этом пути кода, установив visiblepw
в sudoers, что позволит избежать этого предупреждения и позволит вам увидеть запрос пароля.
Итак, в конечном итоге что-то не так с NOPASSWD:
контроль.
Когда несколько правил в sudoers
матч, последний используется совпадение, а не самое конкретное. Итак, пользователь bijo
находится в% sudo или% admin; Таким образом NOPASSWD:
контроль не применяется.
Происходило ли ваше тестирование в командной строке до того, как вы вышли из системы или после добавления себя в одну из этих групп?
Я думаю тебе нужно использовать ssh -t
Добавить Defaults !requiretty
строку в конец файла. Это явно отключит requiretty для всего.