Ansible para sysadmins . Configurar um servidor do zero, do jeito certo, costuma ser repetitivo, demorado e propenso a erro humano. Agora multiplique isso por 5, 10 ou 50 servidores… 💀
É exatamente aqui que o Ansible brilha.
Neste artigo você vai aprender, de forma prática e direta, como criar um playbook único para:
- Atualizar o sistema
- Criar usuário administrativo
- Proteger o SSH
- Ativar firewall
- Aplicar hardening básico
- Funcionar tanto em AlmaLinux quanto em Ubuntu
Tudo isso em menos de 5 minutos, com execução idempotente e reproduzível.
Por que Ansible é a ferramenta ideal para setup inicial
Para sysadmins, Ansible resolve três dores clássicas:
- Padronização – todo servidor nasce igual
- Velocidade – setup completo com um comando
- Segurança – hardening aplicado desde o primeiro boot
E o melhor: não precisa de agente no servidor.
Cenário do playbook
Este playbook faz o seguinte:
- Atualiza pacotes
- Cria usuário
sysadmin - Configura sudo sem senha (opcional)
- Endurece o SSH
- Ativa firewall (UFW ou Firewalld)
- Bloqueia login root via SSH
- Funciona em AlmaLinux 8/9 e Ubuntu 20.04+
Estrutura do projeto
ansible-setup/
├──
├── setup.yml
└── vars.yml
Inventory ( inventory.ini )
[servers] server1 ansible_host=IP_DO_SERVIDOR server2 ansible_host=IP_DO_SERVIDOR2 server3 ansible_host=IP_DO_SERVIDOR3
Variáveis globais (vars.yml)
admin_user: sysadmin ssh_port: 2222 allow_password_auth: false
Playbook principal (setup.yml)
- name: Setup inicial e hardening
hosts: servers
become: yes
vars_files:
- vars.yml
tasks:
- name: Atualizar pacotes (Debian)
apt:
update_cache: yes
upgrade: dist
when: ansible_os_family == "Debian"
- name: Atualizar pacotes (RedHat)
dnf:
name: '*'
state: latest
when: ansible_os_family == "RedHat"
- name: Criar usuário admin
user:
name: "{{ admin_user }}"
groups: wheel,sudo
shell: /bin/bash
create_home: yes
- name: Autorizar sudo sem senha
copy:
dest: "/etc/sudoers.d/{{ admin_user }}"
content: "{{ admin_user }} ALL=(ALL) NOPASSWD:ALL"
mode: 0440
- name: Configurar SSH
lineinfile:
path: /etc/ssh/sshd_config
regexp: "{{ item.regexp }}"
line: "{{ item.line }}"
loop:
- { regexp: '^#?Port', line: 'Port {{ ssh_port }}' }
- { regexp: '^#?PermitRootLogin', line: 'PermitRootLogin no' }
- { regexp: '^#?PasswordAuthentication', line: 'PasswordAuthentication no' }
- name: Reiniciar SSH
service:
name: sshd
state: restarted
- name: Ativar firewall (UFW)
ufw:
rule: allow
port: "{{ ssh_port }}"
when: ansible_os_family == "Debian"
- name: Ativar firewall (Firewalld)
firewalld:
port: "{{ ssh_port }}/tcp"
permanent: yes
state: enabled
when: ansible_os_family == "RedHat"Execução
ansible-playbook -i inventory.ini setup.yml
Em menos de 5 minutos, o servidor estará:
- Atualizado
- Protegido
- Padronizado
- Pronto para produção
Boas práticas para produção
- 🔑 Use SSH por chave, nunca senha
- 🔁 Versione seus playbooks (Git)
- 🧪 Teste em VM antes de rodar em produção
- 📦 Separe roles conforme o ambiente crescer
Quando este setup NÃO é suficiente
Este playbook é ideal para baseline de segurança, mas não substitui:
- CIS Benchmark completo
- Hardening de kernel
- Auditoria com Lynis/OpenSCAP
Ele é o primeiro passo, não o último.
Conclusão
Se você ainda faz setup manual de servidor em 2026, você está:
- Perdendo tempo
- Introduzindo inconsistência
- Assumindo riscos desnecessários
Com Ansible, o servidor já nasce certo.
Automatize cedo. Automatize sempre.
