Comment définir le nom d'utilisateur / mot de passe Ansible par défaut pour la connexion SSH?

60

J'utilise Ansible et j'ai cette configuration dans mon inventaire / tout:

[master]
192.168.1.10 ansible_connection=ssh ansible_ssh_user=vagrant ansible_ssh_pass=vagrant

[slave]
192.168.1.11 ansible_connection=ssh ansible_ssh_user=vagrant ansible_ssh_pass=vagrant
192.168.1.12 ansible_connection=ssh ansible_ssh_user=vagrant ansible_ssh_pass=vagrant

[app]
192.168.1.13 ansible_connection=ssh ansible_ssh_user=vagrant ansible_ssh_pass=vagrant

[all:children]
master
slave

Je ne veux pas répéter tous les paramètres pour chaque nouvelle instance. Comment puis-je les configurer à un seul endroit? Y at-il un fichier avec ces paramètres?

Robert
la source
3
~/.ssh/config
ceejayoz
1
@ceejayoz Pourriez-vous expliquer un peu
Robert
Je ne suis pas un administrateur Ansible, et la documentation est trouble sur le sujet ( s'agit-il d'une "variable" ou d'un "paramètre" et y a-t-il une différence? ), Mais il semble que vous puissiez en quelque sorte définir des variables au niveau du groupe.
DerfK

Réponses:

75

Vous pouvez ajouter la section suivante à votre fichier d'inventaire:

[all:vars]
ansible_connection=ssh
ansible_user=vagrant
ansible_ssh_pass=vagrant

Note: Avant Ansible 2.0 ansible_userétait ansible_ssh_user.

Alexey Labzov
la source
2
Au-dessus de Ansible 2.0, il devrait être: [all:vars] ansible_connection=ssh ansible_port=22 ansible_user=admin
zx1986 le
2
@ zx1986 Où avez-vous lu cela?
030
2
@ 030 ici: docs.ansible.com/ansible/…
zx1986
Notez que le port 22 est la valeur par défaut pour ansible_port. Vous n'avez donc pas besoin de le spécifier explicitement, sauf s'il est différent. Si quelqu'un sait comment appliquer des variables à plus d'un groupe à la fois (mais pas «tous»), la séparation par virgule ne semble pas fonctionner.
William Turrell
1
@ WilliamTurrell un peu tard mais .. vous pouvez créer un groupe de groupes (avec le modificateur: children), puis définir les variables par la suite (avec le modificateur: vars).
Lasse Halberg Haarbye
23

Variables de groupe

Vous pouvez définir des variables qui s'appliquent à tous les hôtes en utilisant la disposition du livre de lecture spécifiée dans le document Meilleures pratiques d' Ansible et en créant un group_vars/allfichier dans lequel vous les définissez .

---
# file: group_vars/all
ansible_connection: ssh 
ansible_ssh_user: vagrant 
ansible_ssh_pass: vagrant

[modifier] Je suis toutefois confus quant à ce que vous essayez de faire. Vous n'avez pas besoin de spécifier l'utilisateur ou le mot de passe Ansible dans l'inventaire. Si vous utilisez Vagrant, ce n'est absolument pas le cas, et si vous appelez Ansible à partir de la ligne de commande, vous pouvez spécifier l'utilisateur avec --user=vagrantet lui demander le mot de passe --ask-pass.

Philip Wilson
la source
1
Je dois seulement faire une meilleure organisation de mon infrastructure. Si toujours je vais utiliser vagrant: vagrant, je veux mettre la configuration dans un endroit où Ansible est chargé par défaut, mais je ne sais pas où. Chaque connexion à exécuter doit l'utiliser.
Robert
Le fichier doit-il être nommé group_vars/all/main.ymlou simplement group_vars/all?
realtebo
celui-ci a fonctionné pour moi après l'installation sshpass-"you must install the sshpass program"
user9869932
1
@realtebo Le fichier doit être nommé group_vars/all.
xloto
1
-k for ask pass n'est pas très amusant pour "tous" quand chaque hôte a un mot de passe différent. Oui, vous avez besoin de sshpass, et oui, vous aurez probablement besoin de créer des unknown_hosts si vous ne vous êtes jamais connecté auparavant ~ ~ .ssh \ config est la voie à suivre.
mckenzm
5

Je pense qu'il est préférable d'utiliser l'installation de la clé ssh sur tous les serveurs de l'extraction. Vous ne devez exécuter ssh-copy-id que par nœud et installer votre clé ssh partout pour permettre à ansible de se connecter à l'aide de votre clé ssh. Il sera plus sûr de ne pas enregistrer les mots de passe dans le classeur / inventaire.

Pour ce faire, vous devez générer votre paire de clés ssh puis exécuter ssh-copy-id pour tous les serveurs.

podarok
la source
1
Si quelqu'un peut voler le mot de passe de votre fichier de configuration, il pourra probablement également utiliser vos clés ssh. Et cela n’a rien à voir avec la réponse à la question OP. Cette question ne demandait pas d’opinion sur les alternatives.
Muh Fugen
@MuhFugen> Comment puis-je les configurer à un seul endroit? Y at-il un fichier avec ces paramètres? C’est une phrase exacte qui laisse la porte à l’opinion et la réponse permet de comprendre la bonne direction. Le vol de configuration (qui pourrait vivre dans le dépôt git quelque part) n’est pas la même chose que le vol de clé privée.
podarok
4

Ajouter ci-dessous aux hôtes de l'inventaire.

Pour Ansible <2.0:

[all:vars]
ansible_connection=ssh
ansible_ssh_user=vagrant 
ansible_ssh_pass=vagrant

Pour Ansible> = 2.0 :

[all:vars]
ansible_connection=ssh # actually default mode smart is OK
ansible_user=vagrant
ansible_pass=vagrant # or ansible_ssh_pass=vagrant
Mithril
la source
Le lien ne mentionne ansible_ssh_passpas ansible_pass.
Matthias Weiler
2

Disclaimer: Je n'ai testé cela que sur OSX. Sur la base des divers documents, je pense que cela fonctionnera sur d’autres plateformes.

"répertoire du projet" fait référence au répertoire de base du projet Vagrant - le répertoire qui contient Vagrantfile.

Fichier d'inventaire généré automatiquement par Vagrant:

Vagrant crée un fichier d'inventaire avec les vars de connexion Ansible par défaut. Cherchez-le dans <project directory>/.vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory.

Ce fichier sera régénéré par Vagrant au besoin, ainsi les modifications manuelles seront écrasées. Toutefois, conformément à la documentation Vagrant, vous pouvez spécifier plusieurs ordinateurs, groupes de vars, etc., Vagrantfileet ils seront ajoutés à ce fichier d'inventaire.

Configurez Ansible pour utiliser par défaut ce fichier d'inventaire:

Pour que ce fichier devienne le fichier par défaut utilisé par la ansiblecommande lorsque vous vous trouvez dans le répertoire du projet (sur l'hôte), ajoutez un ansible.cfgfichier dans votre répertoire de projet avec le contenu suivant, en modifiant le chemin d'accès selon vos besoins:

[defaults]
inventory = ./path/to/inventory

Pour confirmer que ce fichier d'inventaire est utilisé, recherchez-le comme fichier par défaut signalé par ansible:

(depuis le répertoire du projet)

$ ansible | grep inventory ERROR! Missing target hosts -i INVENTORY, --inventory-file=INVENTORY specify inventory host path (default=./.vagrant/provis ioners/ansible/inventory/vagrant_ansible_inventory) or

Pour confirmer vos hôtes:

$ ansible all --list-hosts hosts (2): master slave

Utiliser Ansible avec ces hôtes:

À partir du répertoire du projet, vous devriez alors pouvoir utiliser ansiblenormalement avec les hôtes que vous avez définis Vagrantfile.

Par exemple:

ansible slave -a 'hostname'
kentr
la source