Se eu entendi seus comentários corretamente, o problema aqui é que o comando será emitido por meio de uma conexão que não tem a capacidade de inserir a senha que o sudo usa como padrão para solicitar. Além disso, em muitas distribuições do sistema operacional, o sudo usará como padrão o TTY - que este programa pode não ter.
No entanto, o sudo é capaz de ter uma estrutura de permissões muito refinada, permitindo que um ou mais usuários emitam um comando específico sem senha e TTY. Abaixo, mostrarei três maneiras de configurar isso para suas necessidades. Qualquer um que você escolher, o usuário agora poderá emitir o comando sudo rndc reload
sem precisar digitar uma senha.
(Além disso, isso pode ser desnecessário, mas ... por favor lembre-se de fazer uma cópia de backup do seu arquivo sudoers antes de editá-lo, para manter um shell onde você está root aberto no caso de você precisa reverter para o backup e editá-lo usando visudo
em vez de sudo vi /etc/sudoers
. Espero que essas precauções sejam desnecessárias, mas ... melhor tê-las e não precisar delas do que o inverso!)
1. Se você não quer exigir um TTY para quaisquer solicitações
A maneira mais fácil de se livrar dos requisitos de TTY (se houver) é garantir que a linha que começa com Defaults
em /etc/sudoers
não contenha a palavra requiretty
- em vez disso, ela deve conter !requiretty
. No entanto, se você fizer isso, significa que o comando no sudo exigirá um tty!
Você também precisará adicionar a linha
rndcuser ALL = (root) NOPASSWD: /path/to/rndc reload, /path/to/dnssec-keygen, /path/to/other/program
2. Se você quiser exigir um TTY para todos os usuários, exceto este
Isso pode ser feito definindo um padrão para esse usuário, assim:
Defaults:rndcuser !requiretty
rndcuser ALL = (root) NOPASSWD: /path/to/rndc reload, /path/to/dnssec-keygen, /path/to/other/program
3. Se você quiser requre um TTY para todos os comandos exceto este comando por este usuário
Isso é um pouco mais complexo, devido à sintaxe do arquivo sudoers. Você precisaria criar um alias de comando para o comando e, em seguida, definir um padrão para esse alias de comando, da seguinte forma:
Cmnd_Alias RNDC_CMD = /path/to/rndc reload, /path/to/dnssec-keygen, /path/to/other/program
Defaults!RNDC_CMD !requiretty
rndcuser ALL = (root) NOPASSWD: RNDC_CMD