Como posso fornecer minha senha repetidamente para um script contendo um loop de sudo?

1

Eu tenho um script que contém

while true
  sudo mycmd
  sleep 10000
  [ ... ] ; break
end

quando eu executar o script no bash, terei que fornecer minha senha uma vez em 10.000 segundos depois de concluir a execução da instância anterior de sudo mycmd .

Eu me lembro que yes | somecommand pode fornecer repetidamente yes como entrada de stdin para somecommand , como respostas a perguntas repetidas de "Sim ou Não". Gostaria de saber como posso fornecer minha senha repetidamente ao script?

Obrigado.

    
por Tim 31.10.2018 / 04:08

2 respostas

4

A senha pode ser canalizada para o comando sudo , mas isso não é seguro de forma alguma e deve ser evitado, se possível.

echo 'hunter2' | sudo -S mycmd

Um método melhor seria simplesmente executar o script inteiro com sudo e exigir apenas a senha uma vez.

A senha sudo também pode ser totalmente evitada, mas também não é recomendada por motivos de segurança. Isso pode ser feito atualizando o arquivo /etc/sudoers com o comando visudo e incluindo uma linha como essa para todos os usuários no grupo wheel .

%wheel ALL=(ALL) NOPASSWD: ALL

Para desativá-lo apenas para uma única comutação de usuário %wheel com o nome de usuário dos usuários.

    
por 31.10.2018 / 06:07
1

Você perguntou:

how I can provide my password repeatedly to the script?

e a resposta do ewatt mostra uma maneira direta de fazer isso.

Usar o sinalizador "NOPASSWD" para a regra "sudo mycmd" evitaria perguntar sua senha, como ewatt mencionou.

Como alternativa, se você não quiser codificar sua senha em um script, diga ao sudo que está OK armazenar em cache a senha desse comando específico até a próxima reinicialização, definindo o timestamp_timout para um valor negativo. Aqui, eu defini um alias para o comando (arbitrariamente substituído como /tmp/mycmd.sh) e usei isso na definição Defaults .

Cmnd_Alias MYCMD = /tmp/mycmd.sh
Defaults!MYCMD timestamp_timeout=-1
tim ALL = MYCMD

Como alternativa, você poderia definir um padrão de tempo limite no nível do usuário:

Defaults:tim timestamp_timeout=-1

... o que significaria que o seu timestamp para qualquer comando sudo seria armazenado em cache até a próxima reinicialização.

Ou ainda os tempos limite para qualquer comando e qualquer usuário, mas em um host > especial:

Defaults@thishost timestamp_timeout=-1

Configurar o timestamp_timeout dessa maneira permite que o sudo armazene em cache sua senha após a primeira vez que você a digita.

Se você implementar uma das opções Defaults para evitar inserir sua senha durante cada loop do script, mas preferir a rede de segurança de inserir sua senha para atividades separadas, execute sudo -k para informar ao sudo " mata "(ou redefine) seu timestamp, para que você seja solicitado na próxima vez. Note que você irá reiniciar este processo "em cache" ... "reset" cada vez que você autenticar no sudo.

Se "até a próxima reinicialização" for muito longo para você, defina-o para um valor que seja maior "o suficiente" do que 10000 segundos - em minutos, portanto, mais de 166! - para permitir que você perceba e insira a senha para cada loop.

    
por 31.10.2018 / 15:06