Eu tenho uma máquina de construção que possui um usuário abc
com acesso limitado ao sudo. Quando verifico o código-fonte e executo meu script de construção, ele funciona bem. O script de construção contém sudo
chamadas para as quais não diz "sudo: nenhum tty presente e nenhum programa askpass especificado". Mas quando fiz a mesma coisa com Jenkins em uma máquina de compilação adicionada como escrava, ele mostra "sudo: sem tty presente e sem programa askpass especificado".
Eu encontrei uma solução dizendo para comentar Default requiretty
no arquivo /etc/sudoers
. Mas não tenho acesso a este arquivo.
Como posso superar esse problema?
Responder1
Ele falha porque sudo
está tentando solicitar a senha do root e não há nenhum pseudo-tty alocado.
Você deve fazer login como root ou configurar as seguintes regras em seu /etc/sudoers
(ou sudo visudo
:):
# Members of the admin group may gain root privileges.
%admin ALL=(ALL) NOPASSWD:ALL
Em seguida, certifique-se de que seu usuário Jenkins pertença ao admin
grupo (ou wheel
).
Idealmente (mais seguro) seria limitar os privilégios de root apenas a comandos específicos que podem ser especificados como%admin ALL=(ALL) NOPASSWD:/path/to/program
Responder2
Existem duas opções: comente a Defaults requiretty
configuração de /etc/sudoers como você mencionou ou use o -t
argumento de alocação pseudo-tty ( ) para ssh
.
Tente o seguinte no seu script Jenkins:
ssh -t 127.0.0.1 "sudo command"
Embora você precise ter ssh
chaves pré-compartilhadas configuradas para você mesmo e executá-las manualmente uma vez para adicionar uma entrada a hosts conhecidos, como alternativa, adicione o -o StrictHostKeyChecking=no
argumento to ssh
para ignorar isso.