ULC Lab · implementação reproduzível
Laboratório: Provisionamento automatizado de dois servidores Linux com Ansible
Você vai automatizar a configuração de dois servidores Linux em máquinas virtuais usando Ansible, com inventário local e playbook YAML. Em cerca de 2 horas, terá um ambiente básico de automação funcional.

- Duração estimada
- 120 min
- Passos
- 12
- Validações
- 5
- Versões da documentação consultada
- Ansible 2.15 · OpenSSH a versão estável atual · Linux (Ubuntu ou CentOS) a versão estável atual
Demonstrar, na prática, como o Ansible automatiza a instalação de pacotes, criação de usuários e configuração de serviços em múltiplos servidores Linux. O laboratório mostra o ciclo completo: instalação do Ansible, preparação do inventário, criação de playbook e execução remota das tarefas. O foco é entender o porquê da automação: padronização, velocidade e redução de erros humanos.
Topologia
Três máquinas: uma VM controladora (Ansible) e duas VMs alvo (servidores Linux). Todas em uma rede privada virtual (exemplo: 192.168.56.0/24). O control node acessa os managed nodes via SSH.
+-------------------+
| Controladora |
| (Ansible) |
| 192.168.56.10 |
+--------+---------+
|
+----------------+----------------+
| |
+--+-----------+ +---------+--+
| Managed Node | | Managed Node |
| (srv1) | | (srv2) |
|192.168.56.11 | |192.168.56.12 |
+--------------+ +--------------+Equipamentos e software
| Item | Requisito, licença ou versão |
|---|---|
| VM Linux (controladora) | 1 vCPU, 1 GB RAM, 1 interface de rede, Ubuntu 22.04 ou CentOS 8 |
| VM Linux (alvo 1) | 1 vCPU, 512 MB RAM, 1 interface de rede, Ubuntu 22.04 ou CentOS 8 |
| VM Linux (alvo 2) | 1 vCPU, 512 MB RAM, 1 interface de rede, Ubuntu 22.04 ou CentOS 8 |
| Ansible | GPLv3 · 2.15 |
| OpenSSH | BSD · a versão estável atual |
| Linux (Ubuntu ou CentOS) | GPLv2 · a versão estável atual |
Roteiro
- Preparar as VMs e rede
Crie três VMs em sua máquina local ou em um ambiente de virtualização. Configure-as na mesma rede virtual privada. Defina IPs estáticos: controladora (192.168.56.10), srv1 (192.168.56.11), srv2 (192.168.56.12).
O que você deve ver: As três VMs se enxergam via ping.
- Instalar o Ansible na controladora
O Ansible só precisa ser instalado na máquina controladora. Use o gerenciador de pacotes adequado.
sudo apt update && sudo apt install ansible -yO que você deve ver: O comando 'ansible --version' retorna a versão instalada.
- Configurar acesso SSH sem senha
O Ansible usa SSH para acessar os nodes. Gere uma chave SSH na controladora e copie para os managed nodes.
ssh-keygen -t ed25519 -C "ansible-lab" ssh-copy-id user@192.168.56.11 ssh-copy-id user@192.168.56.12O que você deve ver: Acesso SSH entre controladora e nodes sem pedir senha.
- Testar conectividade SSH
Verifique se o usuário consegue acessar ambos os nodes via SSH.
ssh user@192.168.56.11 'hostname' ssh user@192.168.56.12 'hostname'O que você deve ver: O hostname de cada VM aparece na tela.
- Criar inventário Ansible
O inventário define quais máquinas o Ansible vai gerenciar. Crie um arquivo chamado 'hosts' no diretório do projeto.
cat > hosts <<EOF [srv] 192.168.56.11 192.168.56.12 EOFO que você deve ver: O arquivo 'hosts' contém os IPs dos nodes.
- Testar o inventário com Ansible ad-hoc
Use um comando ad-hoc do Ansible para testar a comunicação.
ansible -i hosts srv -m ping -u userO que você deve ver: Retorno 'pong' para cada node.
- Criar um playbook básico
O playbook define as tarefas de automação. Crie 'site.yml' para instalar o pacote 'htop', criar usuário 'devops' e garantir o serviço SSH ativo.
cat > site.yml <<EOF - hosts: srv become: yes tasks: - name: Instalar htop apt: name: htop state: present when: ansible_os_family == 'Debian' - name: Instalar htop (CentOS) yum: name: htop state: present when: ansible_os_family == 'RedHat' - name: Criar usuário devops user: name: devops state: present - name: Garantir SSH ativo service: name: ssh state: started enabled: yes when: ansible_os_family == 'Debian' - name: Garantir SSH ativo (CentOS) service: name: sshd state: started enabled: yes when: ansible_os_family == 'RedHat' EOFO que você deve ver: Arquivo YAML criado com as tarefas.
- Executar o playbook
Rode o playbook para aplicar as configurações nos nodes.
ansible-playbook -i hosts site.yml -u userO que você deve ver: Saída mostra cada tarefa sendo aplicada e status 'changed' ou 'ok'.
- Verificar criação do usuário
Confirme que o usuário 'devops' foi criado em ambos os nodes.
ssh user@192.168.56.11 'id devops' ssh user@192.168.56.12 'id devops'O que você deve ver: Exibe UID, GID e grupos do usuário 'devops'.
- Verificar instalação do htop
Cheque se o pacote 'htop' está instalado.
ssh user@192.168.56.11 'htop --version' ssh user@192.168.56.12 'htop --version'O que você deve ver: Versão do htop exibida nos dois nodes.
- Verificar status do serviço SSH
Confirme que o serviço SSH está ativo e habilitado.
ssh user@192.168.56.11 'systemctl status ssh || systemctl status sshd' ssh user@192.168.56.12 'systemctl status ssh || systemctl status sshd'O que você deve ver: Status 'active (running)' para o serviço SSH/SSHD.
- Reexecutar o playbook (idempotência)
Execute novamente o playbook para observar o comportamento idempotente (não deve alterar nada se já está conforme).
ansible-playbook -i hosts site.yml -u userO que você deve ver: Saída mostra status 'ok' para todas as tarefas, sem 'changed'.
Como saber que funcionou
| Teste | Comando | Critério |
|---|---|---|
| Conectividade SSH sem senha | ssh user@192.168.56.11 'echo ok' | Retorno 'ok' sem solicitar senha |
| Execução ad-hoc com Ansible | ansible -i hosts srv -m ping -u user | Retorno 'pong' para cada node |
| Usuário devops criado | ssh user@192.168.56.11 'id devops' | Exibe informações do usuário devops |
| Pacote htop instalado | ssh user@192.168.56.12 'htop --version' | Versão do htop exibida |
| Serviço SSH ativo | ssh user@192.168.56.12 'systemctl is-active ssh || systemctl is-active sshd' | Saída 'active' |
Troubleshooting
| Sintoma | Causa provável | Correção |
|---|---|---|
| Falha ao conectar via SSH | Chave SSH não copiada ou permissão incorreta | Verifique permissões (~/.ssh) e repita ssh-copy-id |
| Erro 'UNREACHABLE' no Ansible | IP errado no inventário ou firewall bloqueando porta 22 | Confirme IPs e regras de firewall |
| Pacote não encontrado ao instalar htop | Repositórios desatualizados ou sistema não suportado | Atualize repositórios (apt update/yum update) e tente novamente |
| Serviço SSH não inicia | Nome do serviço diferente entre distribuições | Use 'ssh' para Debian/Ubuntu e 'sshd' para CentOS/RedHat |
Segurança e hardening
- Chaves SSH devem ter permissões restritas (600 para id_ed25519, 700 para ~/.ssh)
- Usuário Ansible não deve ser root direto; use become para tarefas privilegiadas
- Remova chaves SSH de teste após o laboratório
- Não exponha as VMs de laboratório em redes públicas sem firewall
Checklist final
Referências
- Documentação oficial do Ansible · Ansible (Red Hat) (docs.ansible.com)
- Guia de usuário do Ansible Galaxy · Ansible (Red Hat) (docs.ansible.com)
- Publicado
- 09/09/2026
- Última revisão
- 09/09/2026
- Versão do conteúdo
- 1.0
- Referências
- 2 oficiais
- Revisão técnica
- redação e revisão por IA, URLs conferidas na publicação
- Status
- Atual
