Ansible è un semplice strumento di automazione che automatizza la distribuzione delle applicazioni software, il provisioning del cloud e la gestione della configurazione. È uno strumento di orchestrazione del server che ti aiuta a gestire e controllare un gran numero di nodi del server da singole posizioni chiamate "Macchine di controllo". Ansible è stato creato da Michael DeHaan nel 2012 ed è scritto in Python e Powershell.
In questo tutorial impareremo come distribuire un nuovo utente e abilitare l'autenticazione basata su chiave SSH utilizzando lo strumento di automazione Ansible. Impareremo anche come configurare la "macchina di controllo" di Ansible e come scrivere un semplice playbook ansible.
Prerequisiti
- 2 o più server Ubuntu 18.04
- 10.0.15.10 macchina di controllo
- 10.0.15.21 ansi01
- 10.0.15.22 ansi02
- Privilegi di root
Cosa faremo?
- Impostazione della macchina di controllo Ansible
- Definisci utente e chiave SSH
- Crea file di inventario
- Crea Ansible Playbook
- Distribuisci il server utilizzando Playbook
- Test
Fase 1 - Configurazione della macchina di controllo Ansible
In questo tutorial, utilizzeremo i server Ubuntu 16.04 come Ansible 'Machine Control' e host ansible. Il primo passo che dobbiamo fare è configurare la 'macchina di controllo'.
Installeremo python e ansible sulla "macchina di controllo" ansible eseguendo il comando seguente.
sudo apt install python ansible -y
Al termine dell'installazione, aggiungeremo un nuovo utente di sistema.
Aggiungeremo un nuovo utente denominato "provisioning" per eseguire il provisioning del server utilizzando Ansible.
Aggiungi un nuovo utente "fornitura" e fornisci all'utente una password.
useradd -m -s /bin/bash provision
passwd provision
Ora aggiungi l'utente 'provisioning' per sudo senza la password creando un nuovo file di configurazione sotto '/etc/sudoers.d/' usando il comando seguente.
echo -e 'provision\tALL=(ALL)\tNOPASSWD:\tALL' > /etc/sudoers.d/provision
È stato creato un nuovo utente e ora può utilizzare sudo senza password.
Passaggio 2 - Definisci utente e chiave SSH
In questo passaggio, definiremo l'utente per gli host ansible. Questo utente verrà creato automaticamente da ansible, quindi dobbiamo solo definire il nome utente, la password e la chiave pubblica ssh.
Per ogni server ('ansi01' e 'ansi02'), creeremo un nuovo utente chiamato 'provision' con password 'secret01'. E abbiamo bisogno di crittografare la password 'secret01' usando il comando mkpasswd.
Cripta la password 'secret01' usando il comando seguente.
mkpasswd --method=SHA-512
TYPE THE PASSWORD 'secret01'
Nota:
Assicurati che il pacchetto 'whois' sia installato sul sistema, oppure puoi installarlo usando il seguente comando.
sudo apt install whois -y
E otterrai la password crittografata SHA-512.
Successivamente, genereremo una nuova chiave ssh.
Accedi all'utente "provisioning" e genera la chiave ssh utilizzando il comando ssh-keygen.
su - provision
ssh-keygen -t rsa
Ora l'utente e la password sono stati definiti ed è stata creata la chiave ssh l(situata nella directory '.ssh').
Fase 3:crea un nuovo inventario
In questo passaggio, definiremo i file di inventario per tutti gli host del server.
Accedi come utente 'provisioning' e crea una nuova directory per il progetto.
su - provision
mkdir -p ansible01/
Vai alla directory 'ansible01' e crea un nuovo file di inventario 'inventory.ini' usando vim.
cd ansible01/
vim inventory.ini
Incolla lì la seguente configurazione.
[webserver]
ansi01 ansible_host=10.0.15.21
ansi02 ansible_host=10.0.15.22
Salva ed esci.
Ora crea un nuovo file di configurazione ansible 'ansible.cfg'.
vim ansible.cfg
Incolla lì la seguente configurazione.
[defaults]
inventory = /home/provision/ansible01/inventory.ini
Salva ed esci.
Il file di inventario ansible è stato creato e i nostri script ansible si troveranno sotto l'utente 'provisioning', all'interno della directory 'ansible01'.
Passaggio 4:crea un playbook Ansible
Ansible Playbook è un insieme di istruzioni che invii per l'esecuzione su un singolo o gruppo di host server. Rappresenta l'ansible-provisioning, in cui l'automazione è definita come attività e tutti i lavori come l'installazione di pacchetti, la modifica di file, saranno eseguiti da moduli ansible.
In questo passaggio, creeremo un nuovo playbook ansible per distribuire un nuovo utente, distribuire la chiave ssh e configurare il servizio ssh.
Prima di creare un nuovo playbook ansible, analizzeremo tutte le impronte digitali del server utilizzando il comando ssh-keyscan come di seguito.
ssh-keyscan 10.0.15.21 >> ~/.ssh/known_hosts
ssh-keyscan 10.0.15.22 >> ~/.ssh/known_hosts
L'impronta digitale di tali server verrà archiviata nel file '.ssh/known_hosts'.
Nota:
Se disponi di molti nodi server, puoi salvare il tuo elenco di host e quindi scansionare manualmente l'impronta digitale della chiave ssh utilizzando lo script bash come mostrato di seguito.
for i in $(cat list-hosts.txt)
do
ssh-keyscan $i >> ~/.ssh/known_hosts
done
Quindi, crea il playbook ansible chiamato 'deploy-ssh.yml' usando vim.
vim deploy-ssh.yml
Incolla lì seguendo il playbook ansible.
---
- hosts: all
vars:
- provision_password: '$6$w9S3t7x1kRtmG0u$6nVU9KZsC12Q8DYI4FtgKPy.e/cq/jseB/.DViTO1SpUnoCy.dxcOf8hyfitGq5V0yhgXccxzlqm2o.I3SlDJ0'
gather_facts: no
remote_user: root
tasks:
- name: Add a new user named provision
user:
name=provision
password={{ provision_password }}
- name: Add provision user to the sudoers
copy:
dest: "/etc/sudoers.d/provision"
content: "provision ALL=(ALL) NOPASSWD: ALL"
- name: Deploy SSH Key
authorized_key: user=provision
key="{{ lookup('file', '/home/provision/.ssh/id_rsa.pub') }}"
state=present
- name: Disable Password Authentication
lineinfile:
dest=/etc/ssh/sshd_config
regexp='^PasswordAuthentication'
line="PasswordAuthentication no"
state=present
backup=yes
notify:
- restart ssh
- name: Disable Root Login
lineinfile:
dest=/etc/ssh/sshd_config
regexp='^PermitRootLogin'
line="PermitRootLogin no"
state=present
backup=yes
notify:
- restart ssh
handlers:
- name: restart ssh
service:
name=sshd
state=restarted
Salva ed esci.
Sul copione del playbook:
- creiamo lo script del playbook 'deploy-ssh.yml' da applicare su tutti i server definiti nel file 'inventory.ini'.
- creiamo la variabile ansible 'provision_password', contenente la password crittografata per il nuovo utente.
- Imposta i fatti Ansible su 'no'.
- Definisci l'utente 'root' come utente remoto per eseguire l'automazione delle attività.
- Creiamo nuove attività per aggiungere un nuovo utente, aggiungere l'utente ai sudoer e caricare la chiave ssh.
- Creiamo nuove attività per la configurazione dei servizi ssh, la disabilitazione del login di root e la disabilitazione dell'autenticazione con password. Le attività per la configurazione di ssh attiveranno i gestori 'restart ssh'.
- Creiamo un gestore per riavviare il servizio ssh.
Passaggio 5:esegui il Playbook
Accedi all'utente 'provision' e vai alla directory 'ansible01'.
su - provision
cd ansible01/
Ora esegui il playbook 'deploy-ssh.yml' usando il comando come mostrato di seguito.
ansible-playbook deploy-ssh.yml --ask-pass
Digita la tua password di root e otterrai il risultato come di seguito.
Tutte le attività per la distribuzione di un nuovo utente e della chiave ssh sono state completate correttamente.
Fase 6 - Test
Prova usando il comando ansible.
ansible webserver -m ping
ansible webserver -m shell -a id
Ora riceverai i messaggi verdi come di seguito.
Ora possiamo gestire quei server "ansi01" e "ansi02" utilizzando Ansible e l'utente "provisioning" sarà l'utente predefinito per Ansible.
Test della connessione ai server
ssh 10.0.15.21
ssh 10.0.15.22
E sarai connesso a ciascun server utilizzando il file di chiave predefinito '.ssh/id_rsa' e utilizzando l'utente 'provision'.
La distribuzione del nuovo utente e della chiave ssh tramite ansible è stata completata con successo.