GNU/Linux >> Linux Esercitazione >  >> Ubuntu

Imposta nuovo utente e autenticazione chiave SSH. usando Ansible su Ubuntu 18.04

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?

  1. Impostazione della macchina di controllo Ansible
  2. Definisci utente e chiave SSH
  3. Crea file di inventario
  4. Crea Ansible Playbook
  5. Distribuisci il server utilizzando Playbook
  6. 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.


Ubuntu
  1. Configurazione iniziale del server con Ubuntu 14.04

  2. VPN IPsec basata su StrongSwan che utilizza certificati e chiave pre condivisa su Ubuntu 16.04

  3. Come utilizzare Ansible per installare e configurare Redis 6 su Ubuntu 20.04

  4. Utilizzo di Ansible per installare e configurare Elasticsearch su Ubuntu 20.04

  5. Usare Ubuntu con una configurazione a due schermi?

Come configurare una VPN su Ubuntu

Come installare Ansible su Ubuntu 20.04

Come diventare utente root in Ubuntu Command Line usando su e sudo

Configura l'accesso SSH senza password per più server remoti utilizzando lo script

Come impostare l'autenticazione basata su chiave Ssh per Github utilizzando il file ~/.ssh/config?

Come installare Ansible su Ubuntu 18.04