Я добавил пользователя следующим образом:
$ adduser --system --home /no/home --no-create-home --group --disabled-password --disabled-login testuser
Добавил пользователя в группу:
$ adduser testuser testgroup
добавлены строки в sudoers (visudo):
testuser ALL=(ALL) NOPASSWD: ALL
%testgroup ALL=(ALL:ALL) NOPASSWD: ALL
Когда я пытаюсь запустить скрипт bash со следующим содержимым:
#!/bin/sh
sudo -u testuser /usr/bin/php /usr/local/bin/script.php
Но когда я запускаю этот скрипт, я получаю сообщение об ошибке в журнале:
sudo: no tty present and no askpass program specified
Изменить: requiretty нет в файле sudoers.
Ответ 1 · рейтинг 8 · Etan Reisner
sudo разрешения касаются пользователя/группы, от которых вы меняете, а не пользователя, которого вы меняете на.
Точно так же эти строки разрешений позволяют пользователю testuser и группе testgroup выполнять любую команду (как любой) без пароля.
Вам нужно дать разрешение пользователю, запускающему скрипт, на выполнение команд от имени пользователя testuser для того, что вы хотите.
Предполагая, что это то, что вы имели в виду, чтобы позволить это.
Ответ 2 · рейтинг 4 · jordanm
Эта ошибка возникает, когда в вашем файле sudoers указано requiretty. Из справочной страницы sudoers:
requiretty If set, sudo will only run when the user is
logged in to a real tty. When this flag is set,
sudo can only be run from a login session and not
via other means such as cron(8) or cgi-bin scripts.
This flag is off by default.
Чтобы исправить ошибку, удалите requiretty из файла sudoers.
Ответ 3 · Jeff Tian
Я исправил это, войдя на сервер и добавив следующие строки в конфигурацию ssh-сервера:
> vim /etc/ssh/sshd_config
Match User <your user name>
PermitTTY yes
Так что мне не нужны опции -t постоянно.