Zoeken op website

Ansible Managed Nodes configureren en ad-hocopdrachten uitvoeren - Deel 3


In de vorige twee artikelen van deze Ansible-serie hebben we de kerncomponenten van Ansible en het instellen van Ansible Control Node uitgelegd. In dit deel 3 laten we zien hoe u door Ansible beheerde knooppunten kunt configureren om ad-hocopdrachten uit te voeren op externe hosts.

Stel wachtwoordloze SSH-verificatie in op door Ansible beheerde knooppunten

Als samenvatting van ons laatste onderwerp: het beheren van externe hosts met Ansible vereist het instellen van wachtwoordloze SSH-authenticatie tussen het Ansible-controleknooppunt en de beheerde hosts. Dit omvat het genereren van een sleutelpaar (openbaar en privé SSH-sleutelpaar) op het Ansible Control-knooppunt en het kopiëren van de openbare sleutel naar alle externe hosts. Dit zal een cruciale stap voorwaarts zijn en uw werk veel gemakkelijker maken.

Configureer bevoegdheidsescalatie op beheerde knooppunten

Wanneer u bent aangemeld als een gewone gebruiker, moet u mogelijk bepaalde taken uitvoeren op beheerde knooppunten waarvoor verhoogde rechten of rootrechten vereist zijn. Deze taken omvatten pakketbeheer, het toevoegen van nieuwe gebruikers en groepen en het wijzigen van systeemconfiguraties om er maar een paar te noemen. Om dit te bereiken moet u bepaalde richtlijnen in het draaiboek aanroepen om de taken uit te voeren als een bevoorrechte gebruiker op de externe hosts.

worden

Met Ansible kunt u een andere gebruiker 'worden' op het beheerde knooppunt, anders dan degene die momenteel is ingelogd. De worden:ja-richtlijn verhoogt uw rechten en stelt u in staat taken uit te voeren die rootrechten vereisen, zoals het installeren en bijwerken van pakketten en het opnieuw opstarten van het systeem.

Overweeg een playbook httpd.yml dat de Apache-webserver installeert en start zoals weergegeven:

---
- 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

Met de word: ja richtlijn kunt u opdrachten uitvoeren als rootgebruiker op de externe host.

word_gebruiker

Een andere richtlijn die u kunt gebruiken om een andere gebruiker te worden, is become_user. Hierdoor kunt u bij het inloggen overschakelen naar een sudo-gebruiker op de externe host en niet naar de gebruiker waarmee u inlogt.

Als u bijvoorbeeld een opdracht wilt uitvoeren als tecmint-gebruiker op de afstandsbediening, gebruikt u de instructie zoals weergegeven.

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

word_methode

Deze richtlijn overschrijft de standaardmethode die is ingesteld in het bestand ansible.cfg, die meestal is ingesteld op sudo.

word_flags

Deze worden gebruikt op speel- of taakniveau, bijvoorbeeld wanneer u naar een gebruiker moet overschakelen terwijl de shell is ingesteld op nologin.

Bijvoorbeeld,

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

Opdrachtregelopties bij bevoegdheidsescalatie

Laten we eens kijken naar enkele opdrachtregelopties die u kunt gebruiken om uw bevoegdheden te verhogen bij het uitvoeren van opdrachten:

  • --ask-become-pass, -K – Hiermee wordt u gevraagd om het wachtwoord van de sudo-gebruiker op het externe systeem waarmee u verbinding probeert te maken.
ansible-playbook myplaybook.yml --ask-become-pass

  • --become, -b – Hiermee kunt u de taak uitvoeren als rootgebruiker zonder om een wachtwoord te vragen.
ansible-playbook myplaybook.yml --become 
  • --become-user=BECOME_USER – Hiermee kunt u taken uitvoeren als een andere gebruiker.
ansible-playbook myplaybook.yml --become-user=tecmint

Valideer een werkende configuratie met behulp van ad-hoc Ansible-opdrachten

Soms wilt u misschien snelle en eenvoudige taken uitvoeren op externe hosts of servers in Ansible zonder noodzakelijkerwijs een draaiboek te hoeven maken. In dat geval zou u een ad-hoc opdracht moeten uitvoeren.

Wat is een ad-hocopdracht?

Een ansible ad-hocopdracht is een opdracht van één regel waarmee u eenvoudige taken op een eenvoudige maar efficiënte manier kunt uitvoeren zonder dat u draaiboeken hoeft te maken. Dergelijke taken omvatten het kopiëren van bestanden tussen hosts, het opnieuw opstarten van servers, het toevoegen en verwijderen van gebruikers en het installeren van een enkel pakket.

In deze tutorial verkennen we verschillende toepassingen van Ansible Ad-Hoc-opdrachten. We gaan het onderstaande inventarisbestand gebruiken voor een demonstratie.

[webservers]
173.82.115.165

[database_servers]
173.82.202.239

Basisgebruik van ad-hocopdrachten

Het meest elementaire gebruik van Ansible-Adhoc-opdrachten is het pingen van een host of een groep hosts.

ansible -m ping all

In het bovenstaande commando is de parameter -m de moduleoptie. Ping is de ad-hocopdracht en de tweede parameter vertegenwoordigt alle hosts in het inventarisbestand. De uitvoer van de opdracht wordt hieronder weergegeven:

Om een bepaalde groep hosts te pingen, vervangt u de parameter ‘all’ door de groepsnaam. In het onderstaande voorbeeld testen we de connectiviteit met hosts onder de webserversgroep.

ansible -m ping webservers

Bovendien kunt u het kenmerk -a gebruiken om gewone Linux-opdrachten tussen dubbele aanhalingstekens op te geven. Om bijvoorbeeld de systeemuptime van externe systemen te controleren, voert u het volgende uit:

ansible -a "uptime" all

Om het schijfgebruik van externe hosts te controleren, voert u het programma uit.

ansible -a "df -Th" all

Er zijn honderden en honderden modules die u kunt gebruiken met de Adhoc-opdracht. Voer de onderstaande opdracht uit om de volledige lijst met modules met hun beschrijvingen te bekijken.

ansible-doc -l

Voer de opdracht uit om gedetailleerde informatie over een bepaalde module te bekijken.

ansible-doc module_name

Als je bijvoorbeeld wilt zoeken naar meer details over de yum-module, voer je het volgende uit:

ansible-doc yum

Pakketten/diensten beheren met Ansible

Ansible adhoc-opdrachten kunnen worden gebruikt voor het installeren en verwijderen van pakketten met behulp van yum en apt pakketbeheerders.

Om de Apache-webserver te installeren op de CentOS 7-host onder de groep webservers in het inventarisbestand, voert u de opdracht uit:

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

Om de installatie van de Apache-webserver te verifiëren, logt u in op de externe client en voert u het programma uit.

rpm -qa | grep httpd

Om Apache te verwijderen, wijzigt u eenvoudig de status van aanwezig in afwezig.

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

Nogmaals, om de verwijdering van httpd run te bevestigen.

rpm -qa | grep httpd

Zoals waargenomen zijn Apache-webserverpakketten opgeschoond.

Gebruikers en groepen aanmaken met Ansible

Bij het aanmaken van gebruikers komt de module ‘gebruiker’ goed van pas. Om een nieuwe gebruiker james met wachtwoord redhat aan te maken op het clientsysteem database_server, geeft u de opdracht.

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

Om het aanmaken van de nieuwe gebruiker te bevestigen, voert u de opdracht uit:

ansible database_servers -a "id james"

Om de gebruiker te verwijderen, voert u de opdracht uit:

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

Privilege escalatie

Als u Ansible als gewone gebruiker gebruikt, biedt Ansible privilege-escalatie op externe hosts met behulp van de optie --become om rootrechten te verkrijgen en -k om om het wachtwoord te vragen.

Als u bijvoorbeeld het Ansible adhoc-commando 'netstat -pnltu' wilt uitvoeren met de bevoorrechte optie –-become en optie -K om te vragen naar de root-gebruikerswachtwoord om de opdracht uit te voeren.

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

Om een andere gebruiker dan root te worden, gebruik je het --become-user attribuut.

Om bijvoorbeeld ‘df -Th‘ uit te voeren als tecmint-gebruiker op de externe hosts en te vragen om het wachtwoord, voert u het volgende uit:

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

Feiten verzamelen over hostsystemen

Feiten verwijzen naar gedetailleerde informatie over een systeem. Dit omvat informatie over het IP-adres, systeemarchitectuur, geheugen en CPU om er maar een paar te noemen.

Om informatie over externe hosts op te halen, voert u de opdracht uit:

ansible all -m setup 

Bestandsoverdracht/kopieer bestanden

Ansible gebruikt de module kopiëren om bestanden veilig van de Ansible-besturing naar meerdere externe hosts te kopiëren.

Hieronder ziet u een voorbeeld van een kopieerbewerking:

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

De opdracht kopieert het bestand /var/log/secure in het Ansible Control-knooppunt naar externe hosts in de webserversgroep in de bestemming /tmp.

U kunt de bestandsmodule gebruiken om de rechten en het bestandseigendom te wijzigen.

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

Bovendien kunt u de eigenaar- en groepsargumenten toevoegen, zoals weergegeven:

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

Je kunt ook mappen maken, op een vergelijkbare manier als mkdir -p, zoals weergegeven.

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

Bijvoorbeeld,

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

Conclusie

In dit artikel werpen we licht op hoe u beheerde knooppunten kunt configureren om Ansible ad-hoc-opdrachten uit te voeren om externe hosts te beheren. We hopen dat je het nuttig vond. Geef het een kans en laat ons weten hoe het ging.