Defina HISTIGNORE como " sudo -S "
$ export HISTIGNORE='*sudo -S*'
Em seguida, passe sua senha com segurança para o sudo:
$ echo "your_password" | sudo -S -k <command>
"HISTIGNORE" significa não salvar este comando no histórico. Esse é o histórico na memória ou no arquivo "~ / .bash_history".
Por exemplo, o abaixo irá passar sua senha com segurança para o comando sudo, sem
mantendo um histórico da sua senha.
“- S” significa usar stdin para a senha,
“- k” significa ignorar as credenciais em cache para forçar o sudo
para sempre perguntar. Isso é para um comportamento consistente.
$ export HISTIGNORE='*sudo -S*'
$ echo "<your_password>" | sudo -S -k whoami
$ echo "<your_password>" | sudo -S -k cat /etc/shadow
$ echo "<your_password>" | sudo -S -k bash /tmp/myscript.sh
A desvantagem do método acima é que, se você quiser ver os comandos que você executou no histórico mais tarde, eles não estarão lá. Outro método é atualizar o cache de credenciais de autenticação sudo (o padrão é ativado com tempo limite de 5 minutos) e, em seguida, executar o sudo separadamente. Mas o lado negativo disso é que você precisa estar ciente do cache de 5 minutos.
Por exemplo:
$ export HISTIGNORE='*sudo -S*'
$ echo "<your_password>" | sudo -S -v
$ sudo whoami
$ echo "<your_password>" | sudo -S -v
$ sudo cat /etc/shadow
$ echo "<your_password>" | sudo -S -v
$ sudo /tmp/myscript.sh
Observe que executei um sudo antes de cada comando para garantir que o cache sudo seja atualizado, pois o padrão é 5 mintues. Sim, whoami não deve demorar 5 minutos, mas acho que também deve ser executado antes de cada comando para consistência. Você também pode colocar "exportar HISTIGNORE = ' sudo -S '" no seu arquivo ~ / .bashrc, e então carregá-lo com ". ~ / .Bashrc" ou logoff e login. No entanto, estou pensando em usar isso para fins de script, por isso vou mantê-lo no topo de todos os meus scripts para melhores práticas de segurança. Configurar "echo" "| sudo -S -v" para uma variável também pode ser uma boa idéia, então apenas execute a variável antes de cada comando que precisa de privilégios de root, veja o comentário de Janar. O comentário de "John T" também deve incluir o parâmetro "-k", como se você executasse "sudo -S" sem "-k" e o cache de autenticação sudo já tivesse suas credenciais (e ainda seja válido, o cache de autenticação sudo padrão é 5 minutos) então o bash irá rodar sua senha como um comando, o que é ruim.