У меня есть одна машина сборки, у которой есть пользователь abc
с ограниченным доступом sudo. Когда я проверяю исходный код и запускаю свой скрипт сборки, он работает нормально. Скрипт сборки содержит sudo
вызовы, для которых он не говорит «sudo: нет tty присутствует и не задана программа askpass». Но когда я проделал то же самое с Дженкинсом на сборочной машине, добавленной в качестве ведомой, она показала «sudo: нет tty присутствует и не задана программа askpass».
Я нашел одно решение, говорящее для комментирования Default requiretty
в файле /etc/sudoers
. Но у меня нет доступа к этому файлу.
Как я могу преодолеть эту проблему?
sudo
tty
not-root-user
jenkins
Niraj
источник
источник
sudo
Разрешено ли запускать эту команду с помощью пароля без ввода пароля? Если вам нужно ввести пароль, sudo потребует tty.Ответы:
Есть два варианта: закомментировать
Defaults requiretty
параметр из / etc / sudoers, как вы упомянули, или использовать-t
аргумент pseudo-tty alloc ( ) дляssh
.Попробуйте следующее в вашем скрипте jenkins:
ssh -t 127.0.0.1 "sudo command"
Несмотря на то, что вам нужно будет
ssh
предварительно настроить общие ключи и запустить их один раз вручную, чтобы добавить запись к известным хостам, альтернативно добавьте-o StrictHostKeyChecking=no
аргумент,ssh
чтобы игнорировать это.источник
Не удается, потому что
sudo
пытается запросить пароль root и псевдо-tty не выделено.Вы должны войти в систему как пользователь root или настроить следующие правила в вашем
/etc/sudoers
(или:)sudo visudo
:Затем убедитесь, что ваш пользователь Jenkins принадлежит к
admin
группе (илиwheel
).В идеале (безопаснее) было бы ограничивать права суперпользователя только конкретными командами, которые можно указать как
%admin ALL=(ALL) NOPASSWD:/path/to/program
источник
Если вы выполняете команды через ssh, вам нужно проверить опцию «Exec in pty».
источник