[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.0之前的
ansible_user
是ansible_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_password
和ansible_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" }
评论
〜/ .ssh / config@ceejayoz您能否解释一下
我不是Ansible管理员,并且文档在主题上不明确(这是“变量”还是“参数”,并且有区别吗?)但看起来您可以以某种方式在组级别定义变量。 br />