Digamos que eu tenha o seguinte script bash:
#!/bin/bash
sudo command1
command2
sudo command3
Eu não quero rodar command2
como root, então não vou rodar o script em si com sudo
. Portanto, assim que executo o script, sudo command1
pede minha senha. Infelizmente, command2
leva cerca de 2 horas para ser concluído. Portanto, o timestamp de credenciais sudo expirou e, quando o script atinge sudo command3
, sou solicitado a inserir a senha novamente.
Não quero desabilitar permanentemente o tempo limite do timestamp de credenciais sudo, conforme descrito em https://superuser.com/a/149740 , por exemplo. Eu só quero desabilitar o tempo limite temporariamente, manter efetivamente as credenciais para esta sessão de bash até que ela termine.
Acho que sua melhor aposta é um loop de espera ocupada (em segundo plano) que atualiza o timestamp sudo, que você elimina quando não precisa mais de
sudo
privilégios. Aqui está um script de exemplo; ele é executadosleep 6
em vez de suas duas horas e executa comandoscommand2
visíveis em vez de e :/bin/echo
command1
command2
Para o seu script real, eu recomendaria um loop mais solto:
Ajuste a
sleep 59
gosto, dependendo datimestamp_timeout
configuração existente nos sudoers; Eu escolhi 59 apenas para demonstrar uma escolha que você poderia fazer se o tempo limite do timestamp fosse de 60 segundos.Devo estar faltando alguma coisa aqui, porque a solução parece muito óbvia para mim.
Mas você pode executar o script inteiro
sudo
sem executarcommand 2
como root se alterar o script:Bem, seria possível combinar Como posso fazer o sudo esquecer a senha automaticamente após um comando? e Qual é o propósito de usar `sudo -S` explicitamente?
sudo
com-k
sinalizador para ignorar credenciais para que sempre solicite a senhastdin
parasudo
com flag-S
Pode ser útil para certas situações, mas não tenho certeza se é uma boa ideia armazenar a senha do usuário em uma variável de ambiente.
Atualizando credenciais em segundo plano: