У меня есть одна машина сборки, у которой есть пользователь abc
с ограниченным доступом sudo. Когда я проверяю исходный код и запускаю свой скрипт сборки, он работает нормально. Скрипт сборки содержит sudo
вызовы, для которых не указано "sudo: no tty present and no askpass program selected". Но когда я сделал то же самое с Jenkins на машине сборки, добавленной в качестве подчиненного, он показывает "sudo: no tty present and no askpass program selected".
Я нашел одно решение, говорящее закомментировать Default requiretty
файл /etc/sudoers
. Но у меня нет доступа к этому файлу.
Как мне решить эту проблему?
решение1
Это не удается, поскольку sudo
происходит попытка ввести пароль root, а псевдотерминал не выделен.
Вам необходимо либо войти в систему как пользователь root, либо настроить следующие правила в вашем /etc/sudoers
(или sudo visudo
:):
# Members of the admin group may gain root privileges.
%admin ALL=(ALL) NOPASSWD:ALL
Затем убедитесь, что ваш пользователь Jenkins принадлежит к admin
группе (или wheel
).
В идеале (безопаснее) было бы ограничить привилегии root только определенными командами, которые можно указать как%admin ALL=(ALL) NOPASSWD:/path/to/program
решение2
Есть два варианта: закомментировать Defaults requiretty
настройку из /etc/sudoers, как вы упомянули, или использовать аргумент выделения псевдо-tty ( -t
) для ssh
.
Попробуйте следующее в вашем скрипте jenkins:
ssh -t 127.0.0.1 "sudo command"
Хотя вам придется ssh
настроить предварительно общие ключи и запустить его один раз вручную, чтобы добавить запись в известные хосты, в качестве альтернативы можно добавить аргумент , -o StrictHostKeyChecking=no
чтобы ssh
игнорировать это.