我正在使用Ansible,并且在清单/全部中具有此配置:

[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


我不想为每个新实例重复所有参数。如何在一个地方配置它们?是否有任何带有这些参数的文件?

评论

〜/ .ssh / config

@ceejayoz您能否解释一下

我不是Ansible管理员,并且文档在主题上不明确(这是“变量”还是“参数”,并且有区别吗?)但看起来您可以以某种方式在组级别定义变量。 br />

#1 楼

您可以在库存文件中添加以下部分:

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


注意:Ansible 2.0之前的ansible_useransible_ssh_user

评论


在Ansible 2.0以上,它应该是:[all:vars] ansible_connection = ssh ansible_port = 22 ansible_user = admin

–zx1986
16-4-6在2:52



@ zx1986你在哪里读的?

– 030
16/09/14'7:27

@ 030在这里:docs.ansible.com/ansible/…

–zx1986
16 Sep 14'在10:20

请注意,端口22是ansible_port的默认端口,因此您无需显式指定它,除非有所不同。如果有人知道如何一次将变量应用于一个以上的组(而不是“全部”),则很有意思,逗号分隔似乎不起作用。

–威廉·特瑞尔
16-10-21在15:17

@WilliamTurrell有点晚了,但是您可以创建一组组(使用:children修饰符),然后再设置变量(使用:vars修饰符)。

–拉瑟·哈尔伯格·哈尔比
17年5月6日在8:15

#2 楼

组变量

您可以通过使用Ansible最佳实践文档中指定的剧本布局并在定义它们的地方创建一个group_vars/all文件来设置适用于所有主机的变量。

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


[edit]我对您正在尝试执行的操作感到困惑。您无需在清单中指定Ansible用户或密码。如果您使用的是Vagrant,则绝对不会,如果您从命令行调用Ansible,则可以使用--user=vagrant指定用户,然后使用--ask-pass要求输入密码。

评论


我只需要对基础架构进行更好的组织。如果总是,我将使用vagrant:vagrant我想将其配置放在默认情况下Ansible加载的某个地方,但我不知道在哪里。每个要执行的连接都必须使用它。

–罗伯特
2014年9月17日下午13:20

文件必须命名为group_vars / all / main.yml还是简单地命名为group_vars / all?

– realtebo
18年8月11日在14:46

@realtebo该文件必须命名为group_vars / all。

–xloto
19年3月22日在15:02

当每个主机具有不同的密码时,-k for ask pass对于“全部”来说并不是一件很有趣的事情。是的,您需要sshpass,如果可以的话,如果在〜\ .ssh \ config之前从未连接过,则可能需要种子已知主机。

–mckenzm
19年5月16日在1:37

@realtebo都可以。您可以使用前者将需要加密的变量与其他变量分开

– ivan_onys
19/12/25在7:54

#3 楼

我认为最好将ssh密钥安装到pull上的所有服务器上。
您应该仅在每个节点上运行ssh-copy-id,并在各处安装ssh密钥,以便ansible能够使用ssh密钥登录。最好不要将密码保存到剧本/清单中。

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

评论


如果有人可以从您的配置文件中窃取密码,那么他们也可以使用您的ssh密钥。这与回答OP问题完全无关。这个问题不是在征求其他意见。

– Muh Fugen
17 Dec 17 '13:01



@MuhFugen>如何在一个地方配置它们?是否有带有这些参数的文件?这是一个准确的短语,为发表意见和回应提供了正确方向的理解。窃取配置(可能存在于git repo中的某个地方)与窃取私钥不同。

– Podarok
17/12/18在13:20



#4 楼

将以下内容添加到清单主机。

对于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


评论


该链接提及ansible_ssh_pass,而不是ansible_pass。

–马特西亚斯·韦勒(Matthias Weiler)
18-10-22在18:30

根据文档,它应该是ansible_password。经过测试,似乎可行。

– 030
20-04-26在21:59

#5 楼

免责声明:我仅在OSX上对此进行了测试。基于各种文档,我希望它可以在其他平台上使用。

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

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

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

Vagrant将根据需要重新生成此文件,因此手动编辑将被覆盖。但是,根据Vagrant文​​档,您可以在Vagrantfile中指定多台计算机,对var组进行分组等,它们将被添加到此清单文件中。

配置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'


#6 楼

您必须设置正确的变量。您需要使用:

# yml syntax
ansible_user: myusername
ansible_password: mypassword

# inventory syntax
host ansible_user=myusername ansible_password=mypassword


您需要非常仔细地阅读,因为ansible_ssh_passwordansible_ssh_user在以下版本中不起作用:ansible 2.9.6

#7 楼

以下是如何为SSH连接设置默认的Ansible用户名/密码的步骤
ansible.cfs配置将
$ cat ansible.cfg
[defaults]
inventory = ./inventory

[privilege_escalation]
become = True
become_method = sudo
become_user = root


库存文件将
$ cat inventory
[App1]
10.163.128.21

[App1:vars]
ansible_password=*************
ansible_ssh_user=Appuser1
host_key_checking=False

可执行成功结果
$ ansible App1 -m ping
10.163.128.21 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}