Pesquisa de site

Como configurar nós gerenciados Ansible e executar comandos ad-hoc - Parte 3


Nos dois artigos anteriores desta série Ansible, explicamos os componentes principais do Ansible e a configuração do nó de controle Ansible. Nesta parte 3, demonstraremos como você pode configurar nós gerenciados Ansible para executar comandos ad-hoc em hosts remotos.

Configure a autenticação SSH sem senha para nós gerenciados Ansible

Recapitulando nosso último tópico, o gerenciamento de hosts remotos com Ansible requer a configuração de autenticação SSH sem senha entre o nó de controle Ansible e os hosts gerenciados. Isso envolve a geração de um par de chaves (par de chaves SSH públicas e privadas) no nó Ansible Control e a cópia da chave pública para todos os hosts remotos. Este será um passo crucial no futuro e tornará seu trabalho muito mais fácil.

Configurar o escalonamento de privilégios em nós gerenciados

Quando estiver conectado como um usuário normal, pode ser necessário executar determinadas tarefas em nós gerenciados que exigem privilégios elevados ou privilégios de root. Essas tarefas incluem gerenciamento de pacotes, adição de novos usuários e grupos e modificação de configurações do sistema, para mencionar apenas algumas. Para conseguir isso, você precisa invocar certas diretivas no manual para executar as tarefas como um usuário privilegiado nos hosts remotos.

tornar-se

Ansible permite que você 'se torne' outro usuário no nó gerenciado diferente daquele atualmente conectado. A diretiva become:yes eleva seus privilégios e permite que você execute tarefas que requerem privilégios de root, como instalação e atualização de pacotes e reinicialização do sistema.

Considere um manual httpd.yml que instala e inicia o servidor web Apache conforme mostrado:

---
- name: install and start Apache webserver
  hosts: webservers

  tasks:
       - name: install httpd
         yum: name=httpd  state=latest
         become: yes
       - name: check httpd status
         service: name=httpd state=started

A diretiva become: yes permite que você execute comandos como um usuário root no host remoto.

tornar-se_usuário

Outra diretiva que você pode usar para se tornar outro usuário é a become_user. Isso permite que você alterne para um usuário sudo no host remoto ao efetuar login e não para o usuário com o qual você efetua login.

Por exemplo, para executar um comando como usuário tecmint no controle remoto, use a diretiva conforme mostrado.

- name: Run a command as the apache user
  command: somecommand
  become: yes
  become_user: tecmint

tornar-se_metodo

Esta diretiva substituirá o método padrão definido no arquivo ansible.cfg, que geralmente é definido como sudo.

tornar-se_flags

Eles são usados no nível do jogo ou da tarefa, por exemplo, quando você precisa mudar para um usuário quando o shell está definido como nologin.

Por exemplo,

- name: Run a command as nobody
  command: somecommand
  become: true
  become_method: su
  become_user: nobody
  become_flags: '-s /bin/sh'

Opções de linha de comando no escalonamento de privilégios

Vamos dar uma olhada em algumas das opções de linha de comando que você pode usar para elevar seus privilégios ao executar comandos:

  • --ask-become-pass, -K – Isso solicita a senha do usuário sudo no sistema remoto que você está tentando conectar.
ansible-playbook myplaybook.yml --ask-become-pass

  • --become, -b – Isso permite que você execute a tarefa como um usuário root sem solicitar uma senha.
ansible-playbook myplaybook.yml --become 
  • --become-user=BECOME_USER – Permite executar tarefas como outro usuário.
ansible-playbook myplaybook.yml --become-user=tecmint

Validar uma configuração de trabalho usando comandos Ad-Hoc Ansible

Às vezes, você pode querer executar tarefas rápidas e simples em hosts ou servidores remotos no Ansible sem necessariamente ter que criar um playbook. Nesse caso, você precisaria executar um comando ad-hoc.

O que é um comando adhoc?

Um comando ad-hoc ansible é um comando de uma linha que ajuda você a executar tarefas simples de maneira simples, mas eficiente, sem a necessidade de criar manuais. Essas tarefas incluem copiar arquivos entre hosts, reinicializar servidores, adicionar e remover usuários e instalar um único pacote.

Neste tutorial, exploramos várias aplicações de comandos Ad-Hoc do Ansible. Usaremos o arquivo de inventário abaixo para uma demonstração.

[webservers]
173.82.115.165

[database_servers]
173.82.202.239

Uso básico de comandos adhoc

O uso mais básico dos comandos Ansible-Adhoc é executar ping em um host ou grupo de hosts.

ansible -m ping all

No comando acima, o parâmetro -m é a opção do módulo. Ping é o comando adhoc e o segundo parâmetro representa todos os hosts no arquivo de inventário. A saída do comando é mostrada abaixo:

Para executar ping em um determinado grupo de hosts, substitua o parâmetro ‘all’ pelo nome do grupo. No exemplo abaixo, estamos testando a conectividade com hosts no grupo de servidores web.

ansible -m ping webservers

Além disso, você pode usar o atributo -a para especificar comandos regulares do Linux entre aspas duplas. Por exemplo, para verificar o tempo de atividade de sistemas remotos, execute:

ansible -a "uptime" all

Para verificar o uso do disco de hosts remotos, execute.

ansible -a "df -Th" all

Existem centenas e centenas de módulos que você pode usar com o comando Adhoc. Para visualizar a lista completa de módulos com suas descrições, execute o comando abaixo.

ansible-doc -l

Para visualizar informações detalhadas sobre um módulo específico, execute o comando.

ansible-doc module_name

Por exemplo, para pesquisar mais detalhes sobre o módulo yum execute:

ansible-doc yum

Gerenciando Pacotes/Serviços com Ansible

Comandos adhoc Ansible podem ser usados para instalação e remoção de pacotes usando gerenciadores de pacotes yum e apt.

Para instalar o servidor web Apache no host CentOS 7 no grupo webservers no arquivo de inventário, execute o comando:

ansible webservers -m yum -a "name=httpd  state=present"

Para verificar a instalação do servidor web Apache, faça login no cliente remoto e execute.

rpm -qa | grep httpd

Para desinstalar o Apache, basta alterar o estado de presente para ausente.

ansible webservers -m yum -a "name=httpd  state=absent"

Novamente, para confirmar a remoção do httpd, execute.

rpm -qa | grep httpd

Conforme observado, os pacotes do servidor web Apache foram eliminados.

Criando usuários e grupos usando Ansible

Ao criar usuários, o módulo ‘usuário’ é útil. Para criar um novo usuário james com senha redhat no sistema cliente database_server, emita o comando.

ansible database_server -m user -a "name=james password=redhat"

Para confirmar a criação do novo usuário, execute o comando:

ansible database_servers -a "id james"

Para remover o usuário, execute o comando:

ansible database_servers -m user -a "name=james state=absent"

Escalação de privilégios

Se você estiver executando o Ansible como um usuário normal, o Ansible fornece escalonamento de privilégios em hosts remotos usando a opção --become para adquirir privilégios de root e -k para solicitar a senha.

Por exemplo, para executar o comando adhoc Ansible 'netstat -pnltu' com a opção privilegiada –-become e a opção -K para solicitar o senha do usuário root para executar o comando.

ansible webservers -m shell -a 'netstat -pnltu' --become -K

Para se tornar outro usuário diferente de root, use o atributo --become-user.

Por exemplo, para executar ‘df -Th‘ como usuário tecmint nos hosts remotos e solicitar a senha, execute:

ansible all -m shell -a 'df -Th' --become-user tecmint -K

Reunindo fatos sobre sistemas host

Fatos referem-se a informações detalhadas sobre um sistema. Isso inclui informações sobre endereço IP, arquitetura do sistema, memória e CPU, para mencionar alguns.

Para recuperar informações sobre hosts remotos, execute o comando:

ansible all -m setup 

Transferência de arquivos/copiar arquivos

Ansible usa o módulo copy para copiar arquivos com segurança do controle Ansible para vários hosts remotos.

Abaixo está um exemplo de operação de cópia:

ansible webservers -m copy -a "src=/var/log/secure dest=/tmp/"

O comando copia o arquivo /var/log/secure no nó Ansible Control para hosts remotos no grupo de servidores web no destino /tmp.

Você pode usar o módulo de arquivo para alterar permissões e propriedade de arquivos.

ansible webservers -m file -a "dest=/tmp/secure mode=600"

Além disso, você pode anexar os argumentos do proprietário e do grupo conforme mostrado:

ansible webservers -m file -a "dest=/tmp/secure mode=600 owner=tecmint group=tecmint"

Você também pode criar diretórios, de maneira semelhante a mkdir -p conforme mostrado.

ansible webservers -m file -a "dest=/path/to/directory mode=755 owner=tecmint group=tecmint state=directory"

Por exemplo,

ansible webservers -m file -a "dest=/home/tecmint/data mode=755 owner=tecmint group=tecmint state=directory"

Conclusão

Neste artigo, esclarecemos como você pode configurar nós gerenciados para executar comandos ad-hoc do Ansible para gerenciar hosts remotos. Esperamos que você tenha achado útil. Experimente e conte-nos como foi.