如何为SSH连接设置默认的Ansible用户名/密码?

我正在使用Ansible,并且在我的清单/ all中有这个configuration:

[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 

我不想重复每个新实例的所有参数。 我怎样才能在一个地方configuration他们? 有没有这些参数的文件?

您可以将以下部分添加到清单文件中:

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

组variables

您可以使用Ansible的“ 最佳实践”文档中指定的Playbook 布局设置适用于所有主机的variables,并创build您定义它们的group_vars/all文件。

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

我很困惑,尽pipe你想要做什么。 您不需要在库存中指定Ansible用户或密码。 如果你使用的是Vagrant,你肯定不会,如果你从命令行调用Ansible,你可以指定用户名为--user=vagrant ,然后用--ask-pass来请求密码。

我认为最好是使用SSH密钥安装到所有服务器上。 你应该只在每个节点上运行ssh-copy-id,并在任何地方安装你的ssh密钥,以便使用你的ssh密钥login。 不要将密码保存到剧本/库存中更安全。

为此,您应该生成您的ssh密钥对 ,然后为所有服务器运行ssh-copy-id。

免责声明:我只在OSX上testing过。 基于各种文档,我希望它能在其他平台上工作。

“项目目录”是指Vagrant项目的基本目录 – 包含Vagrantfile的目录。

Vagrant自动生成的Ansible库存文件:

Vagrant使用默认的Ansible连接variables创build一个库存文件 。 在<project directory>/.vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory

该文件将由Vagrant根据需要重新生成,因此手动编辑将被覆盖。 但是根据Vagrant文​​档,您可以在Vagrantfile指定多台机器,组variables等, Vagrantfile其添加到此清单文件中。

将Ansibleconfiguration为默认为此清单文件:

要将此文件设置为项目目录中(主机上)的ansible.cfg命令所使用的默认值,请在项目目录中添加一个ansible.cfg文件,并根据需要更改path:

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

要确认正在使用此库存文件,请将其查找为默认报告的默认值:

(从项目目录中)

$ 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

确认您的主机:

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

在这些主机上使用Ansible:

从项目目录中,您应该可以正常使用您在Vagrantfile定义的主机。

例如:

 ansible slave -a 'hostname' 

添加到清单主机。

对于Ansible <2.0:

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

对于Ansible> = 2.0 :

 [all:vars] ansible_connection=ssh # actually default mode smart is OK ansible_user=vagrant ansible_pass=vagrant