120 votes

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

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

[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 ? Existe-t-il un fichier contenant ces paramètres ?

3 votes

~/.ssh/config

1 votes

@ceejayoz Pourriez-vous expliquer un peu

0 votes

Je ne suis pas un administrateur Ansible, et les documents sont confus 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 définir des variables au niveau du groupe.

180voto

dodecaplex Points 372

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

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

Nota: Avant Ansible 2.0 ansible_user fue ansible_ssh_user .

7 votes

Au-dessus d'Ansible 2.0, ça devrait l'être : [all:vars] ansible_connection=ssh ansible_port=22 ansible_user=admin

2 votes

@zx1986 où avez-vous lu cela ?

4 votes

29voto

Philip Wilson Points 576

Variables du groupe

Vous pouvez définir des variables qui s'appliquent à tous les hôtes en utilisant l'option mise en page du livre de jeu spécifié dans le fichier Meilleures pratiques et la création d'un group_vars/all où vous les définir .

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

[Je suis confus cependant de ce que vous essayez de faire. Vous ne devriez pas avoir besoin de spécifier l'utilisateur ou le mot de passe Ansible dans l'inventaire. Si vous utilisez Vagrant, ce n'est certainement pas le cas, et si vous appelez Ansible depuis la ligne de commande, vous pouvez spécifier l'utilisateur avec --user=vagrant et faites-lui demander le mot de passe avec --ask-pass .

1 votes

Je dois seulement faire une meilleure organisation de mon infrastructure. Si je vais toujours utiliser vagrant:vagrant je veux mettre sa configuration dans un endroit où Ansible charge par défaut, mais je ne sais pas où. Chaque connexion à exécuter doit l'utiliser.

0 votes

Le fichier doit-il être nommé group_vars/all/main.yml ou simplement group_vars/all ?

0 votes

Celui-ci a fonctionné pour moi après l'installation sshpass - "you must install the sshpass program"

11voto

Mithril Points 473

Ajouter ci-dessous à l'inventaire des hôtes.

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

1 votes

Le lien mentionne ansible_ssh_pass pas ansible_pass .

2 votes

Selon la documentation, ce devrait être ansible_password . Je l'ai testé et cela semble fonctionner.

8voto

MrAIsSaM Points 11

Je pense qu'il est préférable d'utiliser l'installation de clés ssh sur tous les serveurs à travers le pull. Vous devriez exécuter ssh-copy-id uniquement par nœud et installer votre clé ssh partout pour qu'ansible puisse se connecter en utilisant votre clé ssh. Il sera plus sûr de ne pas sauvegarder les mots de passe dans le playbook/inventaire.

Pour ce faire, vous devez générez votre paire de clés ssh et lancez ssh-copy-id pour tous les serveurs ensuite.

3 votes

Si quelqu'un peut voler le mot de passe de votre fichier de configuration, il sera probablement capable d'obtenir vos clés ssh également. Et cela n'a absolument rien à voir avec la réponse à la question de l'OP. Cette question ne demandait pas d'avis sur les alternatives.

2 votes

@MuhFugen > Comment puis-je les configurer en un seul endroit ? Existe-t-il un fichier avec ces paramètres ? C'est une phrase exacte qui laisse la porte ouverte à l'opinion ainsi que la réponse donne une compréhension de la bonne direction. Voler une configuration (qui pourrait se trouver quelque part dans le repo git) n'est pas la même chose que voler une clé privée.

2voto

Sorin Points 137

Avertissement : je n'ai testé ceci que sur OSX. D'après les différentes documentations, je pense qu'il peut fonctionner sur d'autres plateformes.

Le "répertoire du projet" désigne le répertoire de base du projet Vagrant, c'est-à-dire le répertoire qui contient les éléments suivants Vagrantfile .

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

Vagrant crée un fichier d'inventaire avec les paramètres 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 selon les besoins, et les modifications manuelles seront donc écrasées. Cependant, selon la documentation de Vagrant, vous pouvez spécifier plusieurs machines, des variables de groupe, etc. dans le fichier Vagrantfile et ils seront ajoutés à ce fichier d'inventaire.

Configurez Ansible pour qu'il utilise par défaut ce fichier d'inventaire :

Pour faire de ce fichier le fichier par défaut utilisé par le ansible lorsque vous êtes dans le répertoire du projet (sur l'hôte), ajoutez une commande ansible.cfg dans le répertoire de votre projet avec ce contenu, en modifiant le chemin d'accès si nécessaire :

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

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

(à partir du 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 être en mesure d'utiliser ansible comme d'habitude avec les hôtes que vous avez définis dans Vagrantfile .

Par exemple :

ansible slave -a 'hostname'

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X