Por: Adelmo da Silva – consultor de sistemas
Mais um artigo sobre Ansible?! Sim e não! Hehehe.
Publiquei vários artigos sobre o nosso amado Ansible e, acreditem, nem arranhei a superfície desta maravilha. Contudo, para usarmos essa ferramenta, precisamos de que o servidor do Ansible tenha uma conexão de confiança com os outros servidores da rede.
Imagine o seguinte cenário: Você fica é designado para gerir um parque com mais de 150 servidores, físicos e/ou virtuais. Você vai implementar o Ansible nesta rede com esse volume de servidores e precisa criar uma conexão de confiança com eles, um a um. Neste caso, você precisaria abrir o terminal, gerar a chave ssh e depois digitar, para cada IP, por exemplo, o comando “ssh-copy-id root@192.168.100.X”, onde o “X” varia de 50 a 100. Ou seja, do IP 192.168.100.50 até o 192.168.100.200. O mesmo comando 150 vezes. Eita!!! Lá se foi nosso cafezinho.
Bom, mas como um bom profissional, e com recursos infinitos de Internet, depois de várias tentativas consegui montar um shellscript que executa o ssh-copy-id para um lote de IP que estão num arquivo.txt.
Bom, bora pôr a mão na massa!
Script de Envio de Chaves SSH em Lote
Depois de você ter criado as suas chaves SSH privadas e públicas, através do comando ssh-keygen, vamos preparar dois aquivos: envia-chaves-ssh.sh e hosts.txt.
No arquivo hosts.txt, coloque todos os IP’s da sua rede, um por linha:
192.168.100.50
192.168.100.51
192.168.100.52
…
192.168.100.200
Depois, vamos criar o arquivo que irá fazer todo o serviço: envia-chaves-ssh.sh.
No terminal, crie o arquivo utilizando vim, vi ou nano, conforme a sua preferência. No meu caso, eu fiz “vim envia-chaves-ssh.sh”:
#!/bin/bash
# Define o usuário e senha a serem usados para conectar aos hosts
USER=root
PASSWORD=root12345
# Loop para iterar sobre cada host no arquivo hosts.txt
while read HOST; do
# Executa o comando ssh-copy-id para copiar a chave SSH para o host atual
echo “Enviando chave SSH para ${HOST}…”
sshpass -p “${PASSWORD}” ssh-copy-id -o StrictHostKeyChecking=no “${USER}@${HOST}” -f
done < hosts.txt
Nas terceira e quarta linhas temos as credenciais que você deseja usar na conexão ssh. O principal é o loop. Nessa parte é mostrado que será usado o comando sshpass, que é uma ferramenta de linha de comando simples, que não precisa de autenticação interactiva, para que scripts de shell automatizados, como esse, possam ser executados. Maravilha, hein! Explicando em miúdos:
- sshpass: é um programa que permite fornecer uma senha como argumento para o comando ssh. Ele é útil quando você precisa automatizar conexões SSH que exigem autenticação por senha.
- -p “${PASSWORD}”: é usado para especificar a senha a ser usada para autenticação SSH. A senha é fornecida como uma variável chamada ${PASSWORD}. Essa variável foi definida no início do script.
- ssh-copy-id: é o comando que copia a chave pública SSH para o host remoto. Ele se conecta ao host usando SSH e instala a chave pública no arquivo ~/.ssh/authorized_keys do usuário remoto.
- -o StrictHostKeyChecking=no: é uma opção para desabilitar a verificação rigorosa da chave de host. Normalmente, quando você se conecta a um host pela primeira vez, o SSH exige que você confirme a autenticidade da chave do host. Essa opção permite ignorar essa verificação, o que pode ser útil em cenários automatizados.
- “${USER}@${HOST}”: especifica o nome de usuário (${USER}) e o endereço do host remoto (${HOST}) para o qual você deseja copiar a chave pública SSH. A variável $USER foi definida no início do script. Já a variável $HOST vai receber cada um dos IP’s do arquivo txt.
- -f: é uma opção para forçar a cópia da chave pública SSH. Essa opção substitui qualquer chave pública existente no host remoto.
Depois de ter criado o shell script, instale a ferramenta SSHPASS, caso não tenha nativamente no seu sistema operacional. Mude as permissões do shell script para executável:
chmod +x envia-chaves-ssh.sh
./envia-chaves-ssh.sh
Lembre-se de que o arquivo hosts.txt deve estar no mesmo directório do script.
Se as credenciais estiverem corretas, elas serão enviadas e registradas nos IP’s dentro do arquivo hosts.txt.
Pronto! 150 servidores, agora, estarão com a relação de confiança estabelecida com o Ansible. Agora basta você começar a usar. Utiliza o comando Ad-Hoc com o módulo ping e teste a conexão:
ansible all -m ping
Se o resultado do ping estiver verde, ambiente pronto para o imperador Ansible. He he he. E o cafezinho está garantido!
Até o próximo artigo.