Comment utiliser la connexion basée sur un mot de passe SSH dans Ansible en utilisant sshpass
Dans cet article, je vais vous montrer comment exécuter des playbooks Ansible en utilisant une connexion basée sur un mot de passe SSH avec sshpass.
- Prérequis
- Installation de sshpass sur Ubuntu/Debian
- Installation de sshpass sur CentOS 8/RHEL 8
- Configuration d’un répertoire de projet Ansible
- Tester la connexion SSH basée sur un mot de passe dans Ansible
- Connexion SSH basée sur un mot de passe Ansible pour les playbooks
- Ansible sudo Password Login for Playbooks
- Configuration de la connexion SSH automatique basée sur un mot de passe et de la connexion sudo basée sur un mot de passe
Prérequis
Si vous souhaitez essayer les exemples discutés dans cet article,
1) Vous devez avoir Ansible installé sur votre ordinateur.
2) Vous devez avoir au moins un hôte Ubuntu/Debian auquel vous pouvez vous connecter depuis Ansible.
Il existe de nombreux articles sur LinuxHint dédiés à l’installation d’Ansible. Vous pouvez les consulter si nécessaire pour installer les programmes nécessaires sur votre système.
Vous devrez également avoir sshpass installé sur votre ordinateur, où vous devriez avoir Ansible installé. Je vais vous montrer comment installer sshpass sur Ubuntu/Debian et CentOS/RHEL dans cet article. Ne vous inquiétez pas si vous n’avez pas ces programmes déjà installés sur votre système.
Installation de sshpass sur Ubuntu/Debian
Le programme sshpass est disponible dans le dépôt de paquets officiel d’Ubuntu/Debian. Vous pouvez facilement installer ce programme sur votre ordinateur.
D’abord, mettez à jour le cache du dépôt de paquets APT via la commande suivante :
Puis, installez sshpass via la commande suivante :
sshpass devrait maintenant être installé.
Installation de sshpass sur CentOS 8/RHEL 8
sshpass est disponible dans le dépôt EPEL de CentOS 8/RHEL 8. Vous devez avoir activé le dépôt EPEL pour installer sshpass.
Premièrement, mettez à jour le cache du dépôt de paquets DNF via la commande suivante :
Puis, installez le paquet du dépôt EPEL via la commande suivante :
Le paquet du dépôt EPEL devrait maintenant être installé et le dépôt EPEL devrait être activé.
Mettez à nouveau à jour le cache du dépôt du paquet DNF, comme suit :
Installez sshpass via la commande suivante :
sshpass devrait être installé.
Configuration d’un répertoire de projet Ansible
Avant d’aller plus loin, ce serait une bonne idée de créer une structure de répertoire de projet, juste pour garder les choses un peu organisées.
Pour créer un répertoire de projet sshpass/ et tous les sous-répertoires nécessaires (dans votre répertoire de travail actuel), exécutez la commande suivante :
Naviguez vers le répertoire du projet, comme suit :
Créer un fichier d’inventaire des hôtes, comme suit :
Ajouter l’IP ou le nom DNS de votre hôte dans le fichier d’inventaire.
Une fois que vous avez terminé cette étape, enregistrez le fichier en appuyant sur <Ctrl> + X, suivi de Y et <Enter>.
Créer un fichier de configuration Ansible dans le répertoire du projet, comme suit :
Maintenant, tapez les lignes suivantes dans le fichier ansible.cfg.
Une fois que vous avez terminé cette étape, enregistrez le fichier en appuyant sur <Ctrl> + X, suivi de Y et <Enter>.
Tester la connexion SSH basée sur un mot de passe dans Ansible
Puis, essayez de faire un ping sur les hôtes du fichier d’inventaire, comme suit :
NOTE : Ici, l’option -u est utilisée pour indiquer à ansible sous quel utilisateur se connecter. Dans ce cas, ce sera l’utilisateur shovon. Remplacez ce nom d’utilisateur par le vôtre à partir de maintenant, tout au long de la démo.
Comme vous pouvez le voir, je ne suis pas en mesure de me connecter à l’hôte et d’exécuter des commandes.
Pour forcer Ansible à demander le mot de passe de l’utilisateur, exécutez la commande ansible avec l’argument -ask-pass, comme suit :
Comme vous pouvez le voir, Ansible demande le mot de passe SSH de l’utilisateur. Maintenant, tapez votre mot de passe SSH (mot de passe de connexion de l’utilisateur) et appuyez sur <Enter>.
L’hôte peut être pingué, comme suit :
Connexion SSH basée sur un mot de passe Ansible pour les playbooks
Vous pouvez utiliser une connexion SSH basée sur un mot de passe lorsque vous exécutez des playbooks Ansible. Voyons un exemple.
D’abord, créez un nouveau playbook askpass1.yaml dans le répertoire playbooks/, comme suit :
Tapez les lignes suivantes dans le fichier askpass1.yaml playbook file:
user : shovon
tasks:
– name : Ping all hosts
ping:
– name : Print a message
debug :
msg : ‘All set’
Une fois que vous avez terminé cette étape, enregistrez le fichier en appuyant sur <Ctrl> + X, suivi de Y et <Enter>.
Exécutez le playbook askpass1.yaml, comme suit :
Comme vous pouvez le voir, je ne suis pas capable de me connecter à l’hôte. Vous pouvez voir que c’est parce que je n’ai pas exécuté la commande ansible-playbook avec l’option -ask-pass.
Exécutez le askpass1.yaml avec l’option -ask-pass, comme suit :
Comme vous pouvez le voir, Ansible demande un mot de passe SSH. Tapez votre mot de passe SSH et appuyez sur <Enter>.
Le playbook askpass1.yaml devrait maintenant s’exécuter avec succès.
Ansible sudo Password Login for Playbooks
L’option -ask-pass demandera uniquement le mot de passe de connexion SSH. Que faire si vous souhaitez également taper le mot de passe sudo ? Vous verrez comment le faire dans les étapes suivantes.
Premièrement, créez un nouveau playbook askpass2.yaml dans le répertoire playbooks/, comme suit :
Tapez les lignes suivantes dans le fichier askpass2.yaml.
user : shovon
become : True
tâches:
– nom : Installer le paquet apache2
apt:
name : apache2
state : latest
– nom : S’assurer que le service apache2 est en cours d’exécution
service:
name : apache2
state : started
enabled : True
– name : Copy index.html file to server
copy:
src : ../files/index.html
dest : /var/www/html/index.html
mode : 0644
owner : www-data
group : www-data
Ici, j’ai utilisé la commande become : True pour indiquer à Ansible d’exécuter ce playbook avec des privilèges sudo. Une fois que vous avez terminé cette étape, enregistrez le fichier askpass2.yaml en appuyant sur <Ctrl> + X, suivi de Y et <Enter>.
Créer un fichier index.html dans le répertoire files/, comme suit:
Tapez les codes HTML suivants dans le fichier index.html:
<html>
<head>
<title>Homepage</title>
</head>
<body>
<h1>Hello World</h1>
<p>Il fonctionne</p>
</body>
</html>
Une fois que vous avez terminé cette étape, enregistrez le fichier en appuyant sur <Ctrl> + X suivi de Y et <Enter>.
Vous pouvez exécuter le playbook askpass2.yaml avec l’option -ask-pass, comme suit :
Il vous sera alors demandé le mot de passe SSH, comme précédemment.
Mais le playbook peut toujours ne pas s’exécuter même si vous fournissez le mot de passe SSH. La raison en est que vous devez dire à Ansible de demander le mot de passe sudo, ainsi que le mot de passe SSH.
Vous pouvez dire à Ansible de demander le mot de passe sudo en utilisant l’option -ask-become-pass pendant l’exécution du playbook, comme suit :
Maintenant, Ansible vous demandera le mot de passe SSH.
Puis, Ansible vous demandera le mot de passe sudo. Si votre mot de passe sudo est le même que le mot de passe SSH (ce qui est le plus probable), alors laissez-le vide et appuyez sur <Enter>.
Comme vous pouvez le voir, le playbook s’est exécuté avec succès.
Configuration de la connexion SSH automatique basée sur un mot de passe et de la connexion sudo basée sur un mot de passe
Vous pouvez souhaiter utiliser la connexion SSH et sudo basée sur un mot de passe, mais ne pas vouloir taper le mot de passe SSH et le mot de passe sudo chaque fois que vous exécutez un playbook. Si c’est le cas, alors cette section est pour vous.
Pour utiliser la connexion SSH et la connexion sudo basées sur un mot de passe sans être invité à entrer les mots de passe, tout ce que vous avez à faire est d’ajouter les variables d’hôte ou de groupe ansible_ssh_pass et ansible_become_pass dans votre fichier d’inventaire.
D’abord, ouvrez le fichier d’inventaire des hôtes, comme suit :
Si vous avez plusieurs hôtes dans votre fichier d’inventaire et que chacun des hôtes a des mots de passe différents, alors ajoutez les variables ansible_ssh_pass et ansible_become_pass comme variables d’hôte (après chaque hôte) comme suit .
Veuillez remplacer secret par votre mot de passe SSH et sudo.
Si tous les hôtes ou certains d’entre eux ont le même mot de passe, alors vous pouvez ajouter les variables ansible_ssh_pass et ansible_become_pass comme variables de groupe, comme le montre l’exemple ci-dessous.
Ici, je n’ai qu’un seul hôte, donc j’ai ajouté les variables ansible_ssh_pass et ansible_become_pass pour le groupe all (tous les hôtes dans le fichier d’inventaire). Mais, vous pouvez ajouter ces variables pour d’autres groupes spécifiques également.
Une fois que vous avez fini d’ajouter les variables ansible_ssh_pass et ansible_become_pass dans le fichier d’inventaire des hôtes, sauvegardez le fichier d’inventaire des hôtes en appuyant sur <Ctrl> + X, suivi de Y et <Enter>.
Vous pouvez maintenant exécuter le askpass2.yaml, comme suit :
Comme vous pouvez le voir, le playbook s’est exécuté avec succès, bien qu’il n’ait pas demandé le mot de passe SSH ou le mot de passe sudo.
Donc, voilà comment utiliser sshpass pour une connexion SSH et sudo basée sur un mot de passe dans Ansible. Merci d’avoir lu cet article !