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 -i
que 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 -i
segue uma solicitação de senha, então posso emular isso no meu script?
Responder1
Você pode sudo
retirar seu script e garantir que os usuários o chamem usando sudo scriptname
.
Remova sudo -i
a 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 su
para 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