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

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

我正在使用 Ansible,并且我的 inventory/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

我不想为每个新实例重复所有参数。我怎样才能在一个地方配置它们?是否有包含这些参数的文件?

答案1

您可以将以下部分添加到您的库存文件中:

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

笔记:在 Ansible 2.0ansible_user之前ansible_ssh_user

答案2

组变量

您可以使用以下方式设置适用于所有主机的变量剧本布局在 Ansible 中指定最佳实践记录并创建group_vars/all文件,定义它们

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

[编辑] 不过,我对您要做的事情感到困惑。您不需要在清单中指定 Ansible 用户或密码。如果您使用的是 Vagrant,您肯定不需要这样做,如果您从命令行调用 Ansible,您可以指定用户--user=vagrant并让它使用 询问密码--ask-pass

答案3

将以下内容添加到库存主机。

对于 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 # or ansible_ssh_pass=vagrant

答案4

免责声明:我只在 OSX 上测试过。根据各种文档,我预计它可以在其他平台上运行。

“项目目录”是指 Vagrant 项目的基础目录 —— 包含的目录Vagrantfile

Vagrant 自动生成的 Ansible Inventory 文件:

流浪汉创建库存文件使用默认的 Ansible 连接变量。在 中查找<project directory>/.vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory

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

将 Ansible 配置为默认使用此清单文件:

ansible为了使此文件成为您在项目目录(在主机上)中时命令使用的默认文件,请ansible.cfg在项目目录中添加一个包含以下内容的文件,并根据需要更改路径:

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

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

(来自项目目录内)

$ 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 与这些主机结合使用:

在项目目录中,您应该能够ansible正常使用您在中定义的主机Vagrantfile

例如:

ansible slave -a 'hostname'

相关内容