Назад | Перейти на главную страницу

Пароль без sudo в скрипте

у меня есть беспарольный доступ к серверу. Моя учетная запись добавлена ​​в 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 для всего.