Como corrigir 'sudo: nenhum tty presente e nenhum programa askpass especificado' erro?

Estou a tentar compilar algumas fontes usando um makefile. No makefile há um monte de comandos que precisam ser executados como sudo.

Quando eu compilar as fontes de um terminal, tudo vai bem e o make é pausado na primeira vez que um comando sudo é executado esperando pela senha. Depois de digitar a senha, faça um recomeço e complete.

Mas eu gostaria de ser capaz de compilar as fontes no NetBeans. Então, eu iniciei um projeto e mostrei ao NetBeans onde encontrar os fontes, mas quando compilei o projeto ele deu o erro:

sudo: no tty present and no askpass program specified

A primeira vez que atinge um comando sudo.

Procurei o problema na internet e todas as soluções que encontrei apontam para uma coisa: desativar a senha para este usuário. Já que o usuário em questão aqui é o root. Eu não quero fazer isso.

Existe alguma outra solução?

Conceder ao usuário o uso desse comando sem solicitar a senha deve resolver o problema. Primeiro abra um console shell e digite:

sudo visudo

Depois edite esse arquivo para adicionar ao final:

username ALL = NOPASSWD: /fullpath/to/command, /fullpath/to/othercommand

por exemplo

john ALL = NOPASSWD: /sbin/poweroff, /sbin/start, /sbin/stop

permitirá que o usuário john sudo 'poweroff', start' estop' sem ser solicitado por senha.

Olha para a parte inferior do ecrã para as teclas que precisas de usar no visudo - isto não é vi, a propósito - e sai sem guardar ao primeiro sinal de qualquer problema. Aviso de saúde: corromper este ficheiro vai ter consequências graves, edite com cuidado!

Comentários (8)

Tente:

ssh -t remotehost "sudo "

Isto irá remover os erros acima mencionados.

Comentários (5)

O "sudo", por padrão, lerá a senha do terminal em anexo. O seu problema é que não há nenhum terminal anexado quando ele é executado a partir do console netbeans. Então você tem que usar uma maneira alternativa de digitar a senha: isso é chamado de programa askpass.

O programa askpass não é um programa em particular, mas qualquer programa que possa pedir uma senha. Por exemplo, no meu sistema o x11-ssh-askpass funciona bem.

Para fazer isso você tem que especificar qual programa utilizar, seja com a variável de ambiente SUDO_ASKPASS ou no arquivo sudo.conf (veja man sudo para detalhes).

Você pode forçar o sudo a utilizar o programa askpass, utilizando a opção -A. Por padrão, ele só o utilizará se não houver um terminal anexado.

Comentários (6)