GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Configurer le nouvel utilisateur et l'authentification de la clé SSH. en utilisant Ansible sur Ubuntu 18.04

Ansible est un outil d'automatisation simple qui automatise le déploiement des applications logicielles, le provisionnement du cloud et la gestion de la configuration. Il s'agit d'un outil d'orchestration de serveur qui vous aide à gérer et à contrôler un grand nombre de nœuds de serveur à partir d'emplacements uniques appelés « machines de contrôle ». Ansible a été créé par Michael DeHaan en 2012 et est écrit en Python et Powershell.

Dans ce didacticiel, nous allons apprendre à déployer un nouvel utilisateur et à activer l'authentification SSH basée sur une clé à l'aide de l'outil d'automatisation Ansible. Nous apprendrons également à configurer la "machine de contrôle" Ansible, ainsi qu'à écrire un playbook ansible simple.

Prérequis

  • 2 serveurs Ubuntu 18.04 ou plus
    • 10.0.15.10      machine de contrôle
    • 10.0.15.21      ansi01
    • 10.0.15.22      ansi02
  • Privilèges root

Qu'allons-nous faire ?

  1. Configurer la machine de contrôle Ansible
  2. Définir l'utilisateur et la clé SSH
  3. Créer un fichier d'inventaire
  4. Créer un manuel Ansible
  5. Déployer le serveur à l'aide de Playbook
  6. Test

Étape 1 - Configurer la machine de contrôle Ansible

Dans ce didacticiel, nous utiliserons les serveurs Ubuntu 16.04 en tant qu'hôtes Ansible 'Machine Control' et ansible. La première étape que nous devons faire est de mettre en place la "machine de contrôle".

Nous allons installer python et ansible sur la "machine de contrôle" ansible en exécutant la commande suivante.

sudo apt install python ansible -y

Une fois l'installation terminée, nous ajouterons un nouvel utilisateur système.

Nous allons ajouter un nouvel utilisateur nommé "provision" afin d'effectuer le provisionnement du serveur à l'aide d'Ansible.

Ajoutez un nouvel utilisateur 'provision' et donnez un mot de passe à l'utilisateur.

useradd -m -s /bin/bash provision
passwd provision

Ajoutez maintenant l'utilisateur 'provision' pour sudo sans le mot de passe en créant un nouveau fichier de configuration sous '/etc/sudoers.d/' à l'aide de la commande ci-dessous.

echo  -e 'provision\tALL=(ALL)\tNOPASSWD:\tALL'> /etc/sudoers.d/provision

Un nouvel utilisateur a été créé, et maintenant il peut utiliser sudo sans mot de passe.

Étape 2 - Définir l'utilisateur et la clé SSH

Dans cette étape, nous définirons l'utilisateur pour les hôtes ansibles. Cet utilisateur sera créé automatiquement par ansible, il nous suffit donc de définir le nom d'utilisateur, le mot de passe et la clé publique ssh.

Pour chaque serveur ('ansi01' et 'ansi02'), nous allons créer un nouvel utilisateur nommé 'provision' avec le mot de passe 'secret01'. Et nous devons chiffrer le mot de passe 'secret01' à l'aide de la commande mkpasswd.

Chiffrez le mot de passe 'secret01' à l'aide de la commande ci-dessous.

mkpasswd --method=SHA-512
TAPEZ LE MOT DE PASSE 'secret01'

Remarque :

Assurez-vous que le package "whois" est installé sur le système, ou vous pouvez l'installer à l'aide de la commande suivante.

sudo apt installer whois -y

Et vous obtiendrez le mot de passe crypté SHA-512.

Ensuite, nous allons générer une nouvelle clé ssh.

Connectez-vous à l'utilisateur 'provision' et générez la clé ssh à l'aide de la commande ssh-keygen.

su - provision
ssh-keygen -t rsa

Maintenant, l'utilisateur et le mot de passe ont été définis et la clé ssh a été créée (située dans le répertoire '.ssh').

Étape 3 - Créer un nouvel inventaire

Dans cette étape, nous définirons les fichiers d'inventaire pour tous les hôtes de serveur.

Connectez-vous en tant qu'utilisateur 'provision' et créez un nouveau répertoire pour le projet.

su - provision
mkdir -p ansible01/

Allez dans le répertoire 'ansible01' et créez un nouveau fichier d'inventaire 'inventory.ini' en utilisant vim.

cd ansible01/
vim inventaire.ini

Collez-y la configuration suivante.

[serveur Web]
ansi01 ansible_host=10.0.15.21
ansi02 ansible_host=10.0.15.22

Enregistrez et quittez.

Créez maintenant un nouveau fichier de configuration ansible 'ansible.cfg'.

vim ansible.cfg

Collez-y la configuration suivante.

[defaults]
inventaire =/home/provision/ansible01/inventory.ini

Enregistrez et quittez.

Le fichier d'inventaire ansible a été créé et nos scripts ansible seront situés sous l'utilisateur 'provision', dans le répertoire 'ansible01'.

Étape 4 - Créer un Playbook Ansible

Ansible Playbook est un ensemble d'instructions que vous envoyez pour s'exécuter sur un seul ou un groupe d'hôtes de serveur. Il représente le provisionnement ansible, où l'automatisation est définie comme des tâches, et tous les travaux comme l'installation de packages, l'édition de fichiers, seront effectués par des modules ansible.

Dans cette étape, nous allons créer un nouveau playbook ansible pour déployer un nouvel utilisateur, déployer la clé ssh et configurer le service ssh.

Avant de créer un nouveau playbook ansible, nous analyserons toutes les empreintes digitales du serveur à l'aide de la commande ssh-keyscan comme ci-dessous.

ssh-keyscan 10.0.15.21>> ~/.ssh/known_hosts
ssh-keyscan 10.0.15.22>> ~/.ssh/known_hosts

L'empreinte digitale de ces serveurs sera stockée dans le fichier '.ssh/known_hosts'.

Remarque :

Si vous avez beaucoup de nœuds de serveur, vous pouvez enregistrer votre liste d'hôtes, puis analyser manuellement l'empreinte de la clé ssh à l'aide du script bash, comme indiqué ci-dessous.

for i in $(cat list-hosts.txt)
do
ssh-keyscan $i>> ~/.ssh/known_hosts
done

Ensuite, créez le playbook ansible nommé "deploy-ssh.yml" à l'aide de vim.

vim deploy-ssh.yml

Collez-y la suite du playbook ansible.

---
- hôtes :tous
  vars :
    - provision_password :'$6$w9S3t7x1kRtmG0u$6nVU9KZsC12Q8DYI4FtgKPy.e/cq/jseB/.DViTO1SpUnoCy.dxjOf8hyfitGq5V0yhgXccx3zlqm2/br /> provision
         password={{ provision_password }}

  - nom :ajouter l'utilisateur de provision aux sudoers
    copie :
         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

  - nom :Désactiver l'authentification par mot de passe
    lineinfile :
          dest=/etc/ssh/sshd_config
          regexp='^PasswordAuthentication'
          line="PasswordAuthentic ation no"
          state=present
          backup=yes
    notifier :
      - redémarrer ssh

  - nom :Désactiver la connexion root
    lineinfile :
          dest=/etc/ssh/sshd_config
          regexp='^PermitRootLogin'
          line="PermitRootLogin no"
          state=present
          backup=yes
notifier :
      - redémarrer ssh

  gestionnaires :
  - nom :redémarrer ssh
    service :
      name=sshd
      state=restarted

Enregistrez et quittez.

Sur le script du playbook :

  • nous créons le script de playbook 'deploy-ssh.yml' à appliquer sur tous les serveurs définis dans le fichier 'inventory.ini'.
  • nous créons la variable ansible 'provision_password', contenant le mot de passe crypté pour le nouvel utilisateur.
  • Définissez les faits Ansible sur "non".
  • Définissez l'utilisateur "root" en tant qu'utilisateur distant pour effectuer l'automatisation des tâches.
  • Nous créons de nouvelles tâches pour ajouter un nouvel utilisateur, ajoutons l'utilisateur aux sudoers et téléchargeons la clé ssh.
  • Nous créons de nouvelles tâches pour configurer les services ssh, désactiver la connexion root et désactiver l'authentification par mot de passe. Les tâches de configuration de ssh déclencheront les gestionnaires 'restart ssh'.
  • Nous créons un gestionnaire pour redémarrer le service ssh.

Étape 5 - Exécuter le Playbook

Connectez-vous à l'utilisateur 'provision' et accédez au répertoire 'ansible01'.

su - provision
cd ansible01/

Exécutez maintenant le playbook 'deploy-ssh.yml' en utilisant la commande comme indiqué ci-dessous.

ansible-playbook deploy-ssh.yml --ask-pass

Tapez votre mot de passe root et vous obtiendrez le résultat ci-dessous.

Toutes les tâches de déploiement d'un nouvel utilisateur et d'une clé SSH ont été effectuées avec succès.

Étape 6 - Tester

Testez en utilisant la commande ansible.

serveur web ansible -m ping
serveur web ansible -m shell -a id

Vous obtiendrez maintenant les messages verts comme ci-dessous.

Nous pouvons maintenant gérer ces serveurs 'ansi01' et 'ansi02' à l'aide d'Ansible, et l'utilisateur 'provision' sera l'utilisateur par défaut pour Ansible.

Tester la connexion aux serveurs

ssh 10.0.15.21
ssh 10.0.15.22

Et vous serez connecté à chaque serveur en utilisant le fichier de clé par défaut '.ssh/id_rsa' et en utilisant l'utilisateur 'provision'.

Le déploiement d'un nouvel utilisateur et d'une clé ssh à l'aide d'ansible a été effectué avec succès.


Ubuntu
  1. Configuration initiale du serveur avec Ubuntu 14.04

  2. VPN IPsec basé sur StrongSwan utilisant des certificats et une clé pré-partagée sur Ubuntu 16.04

  3. Utiliser Ansible pour installer et configurer Elasticsearch sur Ubuntu 20.04

  4. Installer et configurer le serveur OpenVPN sur Ubuntu 20.04

  5. Configurer SFTP et empêcher SSH sur Ubuntu 20.04

Comment configurer un VPN sur Ubuntu

Comment installer Ansible sur Ubuntu 20.04

Comment devenir utilisateur root dans la ligne de commande Ubuntu en utilisant su et sudo

Configurer la connexion SSH sans mot de passe pour plusieurs serveurs distants à l'aide d'un script

Comment configurer l'authentification basée sur la clé Ssh pour Github en utilisant le fichier ~/.ssh/config ?

Comment installer Ansible sur Ubuntu 18.04