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' e
stop' 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!
Tente:
ssh -t remotehost "sudo <cmd>"
Isto irá remover os erros acima mencionados.
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.