Como automatizar a entrada de uma senha, em um arquivo em lote personalizado?

Como automatizar a entrada de uma senha, em um arquivo em lote personalizado?

Eu sei que isso pode parecer ingênuo para a maioria de vocês, mas ainda sou novo no Linux, então, por favor, tenham paciência comigo.

Estou tentando criar um arquivo em lote para automatizar alguns comandos.
Um desses comandos é o sudo -ique preciso acessar alguns arquivos no root.

Então meu script até agora está assim:

#!/bin/bash
sudo -i
cd my-server/bin
./run-server.sh

Eu sei que depois sudo -isegue uma solicitação de senha, então posso emular isso no meu script?

Responder1

Você pode sudoretirar seu script e garantir que os usuários o chamem usando sudo scriptname.

Remova sudo -ia linha do seu script e substitua-a por esta:

# Must prefix with sudo when calling script
if ! [[ $(id -u) == 0 ]]; then
    echo You must call this script using sudo. Aborting.
    exit 99
fi

Responder2

Pergunta justa. Mas é altamente recomendável que você não faça isso da maneira que está tentando/prevendo atualmente. O motivo para evitar sua abordagem é que ela exige a inserção de sua senha em um arquivo de texto que pode ser lido por outros usuários/invasores. Agora, você pode definir o arquivo para 600 permissões para que ele possa ser lido apenas pelo seu usuário (e root), mas não tenho certeza se os subcomandos dos scripts podem estar registrados em algum lugar, disponibilizando sua senha novamente para possíveis invasores . Suponho que a verdadeira questão seja: por que você precisa que o script faça login como root automaticamente?

É um processo automatizado ou há algum outro motivo pelo qual você não pode simplesmente responder ao prompt de senha apresentado ao executar o script como está? Se for um processo automatizado, você deve simplesmente remover a linha sudo e adicionar a chamada de script ao cron dos usuários root. Há muita documentação sobre como configurar tarefas cron disponíveis por meio de uma simples pesquisa no Google, mas você pode começar comesse)

Além disso, este é um script que simplesmente chama outro script. Você provavelmente deveria apenas tornar run-server.sh executável apenas pelo root, então simplesmente usar sudo supara fazer login no root e executá-lo com /my-server/bin/run-server.sh. Novamente, você pode adicionar isso ao cron do root se precisar automatizá-lo de acordo com uma programação.

AVISO:Não faça um script disso eespecialmentenão digite em uma linha de comando (será registrado)

echo 'PASSWORD' | sudo -S /my-server/bin/run-server.sh

informação relacionada