Como administrar centralmente servidores Ubuntu [duplicados]

1

Estou curioso para saber se existe uma maneira conveniente de enviar atualizações para vários servidores do Ubuntu a partir de um local central, em vez de remotá-las em cada uma delas individualmente e atualizá-las manualmente. Pontos de bônus se esse local central puder reinicializar os sistemas, se necessário, devido a atualizações.

    
por vonarstonehelm 06.07.2017 / 04:14

2 respostas

0

A palavra-chave é o gerenciamento de configuração. Uma ferramenta que uso para essa finalidade é Ansible . Lá você expressa sua configuração desejada com um arquivo YAML e Ansible cuida de tudo. Claro que você também pode reiniciar os hosts com isso, veja esta resposta que também lhe dá uma primeira impressão de como ficará.

Há também outras opções, como Salt , Puppet ou Chef .

    
por Sethos II 06.07.2017 / 08:44
0

Se você quiser, pode usar o meu script que escrevi para meus servidores ... sempre pode haver maneiras melhores de fazer isso, mas ele faz o que deve;)

1. Em cada servidor cliente

a) script de atualização (este também no servidor de controle)

Crie um script em /usr/local/bin/update

#!/bin/bash

# First get sudo rights
sudo echo ""

echo -e "\e[92m UPDATE PACKAGE SOURCES \e[39m"
sudo apt update
echo -e "\e[92m UPGRADE TO NEW PACKAGES \e[39m"
sudo apt upgrade
echo -e "\e[92m UPGRADE DISTRIBUTION-PACKAGES \e[39m"
sudo apt dist-upgrade
echo -e "\e[92m AUTOREMOVE OLD PACKAGES \e[39m"
sudo apt autoremove
clear
if [ -f /var/run/reboot-required ]; then
  echo -e "\e[92m#####################################\e[39m"
  echo -e "\e[92m#                                   #\e[39m"
  echo -e "\e[92m#               DONE                #\e[39m"
  echo -e "\e[92m#                                   #\e[39m"
  echo -e "\e[92m# \e[91mNOTE: A reboot of the System is\e[92m   #\e[39m"
  echo -e "\e[92m#       \e[91mrequired in order to\e[92m        #\e[39m"
  echo -e "\e[92m#       \e[91mcomplete the Update!\e[92m        #\e[39m"
  echo -e "\e[92m#                                   #\e[39m"
  echo -e "\e[92m#####################################\e[39m"
else
  echo -e "\e[92m#####################################\e[39m"
  echo -e "\e[92m#                                   #\e[39m"
  echo -e "\e[92m#               DONE                #\e[39m"
  echo -e "\e[92m#                                   #\e[39m"
  echo -e "\e[92m#####################################\e[39m"

se você confiar nas atualizações, também poderá usar a opção -y para não precisar interagir (na maior parte do tempo; é claro que às vezes é solicitado que você insira, dependendo das atualizações).

Torne-o executável

chmod +x /usr/local/bin/update

b) rebootServer

crie um script em /usr/local/bin/rebootServer

#!/bin/bash

echo -n "0"
sudo reboot &> /dev/null
exit

e torná-lo executável

chmod +x /usr/local/bin/rebootServer

c) visudo

executar

sudo visudo

adicione as linhas

<userName> ALL=NOPASSWD: /usr/local/bin/update
<userName> ALL=NOPASSWD: /usr/local/bin/rebootServer

salve e saia.
Isso permite que o usuário do sudo execute rebootServer e update (e qualquer código / script dentro deles) sem ser promovido para digitar a senha sudo.

d) adicione mais dois scripts de controle

Um em /usr/local/bin/sshResponse

#!/bin/bash

echo -n "0"

e um em /usr/local/bin/rebootResponse

#!/bin/bash

#!/bin/bash

if [ -f /var/run/reboot-required ];
then
   echo -n "1"
else
   echo -n "0"
fi

E também torná-los executáveis

chmod +x /usr/local/bin/sshResponse
chmod +x /usr/local/bin/rebootResponse

O primeiro é usado apenas para confirmar a conexão de trabalho ssh (pode haver maneiras melhores). O segundo é usado para exibir mais tarde quando uma reinicialização é necessária nos servidores atualizados.



2. No servidor principal / controle

a) ssh-keygen

Porque você não precisa digitar a senha em cada login do ssh, nós usamos as chaves. Executar

ssh-keygen

e siga as instruções.

Agora você passa a chave para todos os servidores clientes. Então, para cada execução de servidor (no servidor de controle)

ssh-copy-id <usernameOnClient>@<clientServerIP>

depois disso, você poderá conectar-se ao ssh a partir do servidor de controle sem que seja solicitada uma senha.

b) o script do gerador

Agora a parte maluca. Eu uso a seguinte configuração para gerar automaticamente:

  • um script de reinicialização individual para cada servidor cliente em /usr/local/bin/rebootSERVERNAME
  • um script de atualização individual para cada servidor cliente em /usr/local/bin/updateSERVERNAME
  • a /usr/local/bin/rebootAllServers
  • a /usr/local/bin/updateAllServers (a última também atualiza o próprio servidor de controle)

adicione o MEU SCRIPT DO GERADOR para /usr/local/bin/generateAllUpdateScripts e torne-o executável

chmod +x /usr/local/bin/generateAllUpdateScripts

c) o arquivo de configuração

Finalmente, você precisa de um arquivo em /root/.virtualMachines de onde o gerador lê o servidor do cliente. Deve parecer com, por exemplo,

ClientServer1 192.168.1.2
ClientServer2 192.168.1.3



3. Uso

a) adicione servidores clientes a /root/.virtualMachines

O script do gerador usa esse arquivo e lê a linha de configuração do servidor do cliente para gerar scripts de acordo. (Sem linhas vazias! Sem espaços nem _ ou - permitidos nos nomes dos servidores !!)

b) gerar os scripts

simplesmente execute

generateUpdateAllScripts

Depois de terminar, você poderá chamar qualquer um desses comandos:

para atualizar todos os servidores

executa o script de atualização em cada máquina e fornece um resumo nos servidores de clientes do fim, onde atualizados e se a reinicialização é necessária.

updateAllServers

para reiniciar todos os servidores

reinicializa todos os servidores e, no final, aguarda até que todos os servidores voltem a ficar on-line ou que ocorram exibições de erros

rebootAllServers

atualiza um servidor específico

updateSERVERNAME

reinicialize um servidor específico

rebootSERVERNAME
    
por derHugo 06.07.2017 / 08:46