Executa scripts locais em vários servidores usando o usuário sudo através de um script

2

Eu tenho cerca de 100 servidores remotos. Eu quero gerenciar todos os meus servidores usando um servidor de terminal para atualizar, executar comandos com privilégios sudo.

Eu preciso ter um script principal que use outro script de teste como argumento. O script principal é executado através de um loop com um arquivo hosts com nomes de servidores remotos.

O script de teste tem todos os comandos sudo reais para serem executados nos servidores remotos de uma só vez

./ script do hostfile mainscript por exemplo, o script de teste pode ter "sudo yum -y update" ou uma string de comandos.

Isso parece fácil se eu fizer login como usuário root. Mas eu quero rodar isso como usuário 'admin' que tem privilégios sudo em todos os servidores remotos. Todos esses scripts estão localizados localmente no servidor de terminal.

Por favor, sugira-me alguma idéia que você possa ter para conseguir isso?

    
por Shashi 08.01.2013 / 19:45

4 respostas

3

Uma ideia, embora possa não ser a melhor disponível, é configurar o ssh para usar a autenticação baseada em chave em vez da autenticação por senha. Estas instruções devem ser suficientes no caso de você não estar ciente disso Autenticação de chave SSH

Não sei o que seu script de teste contém nem a complexidade dele. vamos assumir que é um script complexo justo e salva a saída em / tmp / script_output / e neste caso eu sugiro o seguinte:

while read -r i
do
   scp $2 admin@remote_server:/tmp/
   ssh -t admin@remote_server /tmp/$2
   ssh admin@remote_server rm /tmp/$2
   scp -r admin@remote_server:/tmp/script_output/ /tmp/
   ssh admin@remote_server rm -rf /tmp/script_output
done < "$1"

A propósito, dos sudoers

#
# Disable "ssh hostname sudo <cmd>", because it will show the password in clear.
#         You have to run "ssh -t hostname sudo <cmd>".
#
Defaults    requiretty
    
por 08.01.2013 / 20:41
1

Eu tive o mesmo problema há algum tempo. Essa é a minha solução: link

  • Faça o download deste script.
  • Crie um arquivo CSV com nomes de servidores e senhas (suponho que o login seja o mesmo em cada servidor).
  • Crie um script que você deseja executar.
  • Ajuste as variáveis no meu script Ruby, execute-o e deixe que ele faça todo o trabalho para você. : -)
por 08.01.2013 / 23:58
1

A seguir, você poderá executar comandos sudo em vários hosts, tendo apenas que digitar sua senha sudo uma vez no início.

O que está faltando é o loop for ou algo que define a variável HOSTS para os hosts que você possui. O script cria um arquivo na pasta temp que contém a senha sudo , mas esse arquivo é excluído imediatamente. Isso permite que o comando use a senha sudo sem que ela seja exibida na janela do terminal ou no seu script.

#!/bin/bash

if "something" 
 then

 else

cat > /tmp/$HOSTS-pw.sh <<EOS
#!/bin/sh
ssh user@$HOSTS sudo "your command here" <<EOC
$SUDOPW
EOC
EOS

fi

chmod 700 /tmp/$HOSTS-pw.sh
/tmp/$HOSTS-pw.sh >/dev/null
if [ -f /tmp/$HOSTS-pw.sh ]; then rm -f /tmp/$HOSTS-pw.sh; fi

echo "Enter SUDO password:"
read -s SUDOPW

for loop here!

unset SUDOPW
exit 0
    
por 03.11.2015 / 22:10
0

Maneira estranha de fazer isso.

Eu faço algumas coisas em muitos servidores usando clusterssh (digite uma vez, faça isso em todos os servidores).

Para mudanças maiores, usamos nossos próprios repositórios que são ativados em todos os servidores. Dessa forma, usamos o mecanismo de correção do sistema operacional para distribuir alterações específicas em um grande número de servidores.

    
por 09.01.2013 / 23:18