我正在尝试在Raspberry PI 2上安装新安装的Archlinux,如下所示:
ansible -i PI2 arch -m setup -c paramiko -k -u alarm -vvvv
这告诉我:针对与用户连接的IP触发设置模块" alarm"询问此特定用户的密码。但是,最终尝试连接的用户是" root"。
这是调试响应:
Loaded callback minimal of type stdout, v2.0
<192.168.1.18> ESTABLISH CONNECTION FOR USER: root on PORT 22 TO 192.168.1.18
192.168.1.18 | UNREACHABLE! => {
"changed": false,
"msg": "ERROR! Authentication failed.",
"unreachable": true
}
库存看起来像这样:
[arch]
192.168.1.18
有些可能相关或不相关的事情如下:
未被忽略并导致连接成功的是将ansible_user=alarm
添加到清单文件中的IP行。
修改 在官方文档中发现了这段有趣的文章:http://docs.ansible.com/ansible/playbooks_variables.html#variable-precedence-where-should-i-put-a-variable其中指出:
Another important thing to consider (for all versions) is that connection specific variables override config, command line and play specific options and directives. For example:
ansible_user will override
- 你and
remote_user:`
最初的问题似乎仍然存在。在清单中没有提及ansible_user
,为什么通过- u
使用root而不是明确提到的用户?
EDIT_END
这是预期的行为吗?
由于
答案 0 :(得分:0)
我自己修了一个Ansible 1.9.4沙箱,复制了ansible.cfg和库存并再次运行命令。 Kinda按预期工作:
⤷ ansible --version
ansible 1.9.4
configured module search path = None
(ANS19TEST)~/Documents/Code/VENVS/ANS19TEST
⤷ ansible -i PI2 arch -m setup -c paramiko -k -u alarm -vvvv
SSH password:
<192.168.1.18> ESTABLISH CONNECTION FOR USER: alarm on PORT 22 TO 192.168.1.18
<192.168.1.18> REMOTE_MODULE setup
从我站立的地方我会说这是一个错误。也许有人可以证实?!然后这就到了bugtracker ......
干杯
修改的
为简洁起见,我省略了库存文件的一个重要部分,最终负责该行为。它看起来像这样:
[hypriot]
192.168.1.18 ansible_user = root
[拱]
192.168.1.18
来自Ansible bugtracker的引用:
清单中使用的名称是字典中的关键字。因此,您作为主机特定变量放入的所有内容将合并为一个大字典。这意味着在某些冲突的情况下,变量会被其他值取代。
您可以通过为同一主机使用不同的名称来防止这种情况(例如,使用IP地址和主机名,或别名或DNS别名),在这种情况下,您仍然可以执行您喜欢的操作。
所以我的库存现在看起来像这样:
[hypriot]
hypriot_local ansible_host = 192.168.1.18 ansible_user = root
[的archlinux]
arch_local ansible_host = 192.168.1.18
这很好用。 Ansible跟踪器上的相应问题在于:https://github.com/ansible/ansible/issues/14268
答案 1 :(得分:0)
您不需要指定paramiko作为连接类型,Ansible会将该部分指出。您可能有一个group_vars
目录,其中为该主机定义了ansible_user
或ansible_ssh_user
变量,该变量可能会覆盖警报用户。
我能够在ansible 2.0.0.2上复制你的测试而没有任何针对运行Raspian的覆盆子pi 2的问题:
➜ ansible ansible -i PI2 arch -m setup -u alarm -vvvv -k
Using /etc/ansible/ansible.cfg as config file
SSH password:
Loaded callback minimal of type stdout, v2.0
<192.168.1.84> ESTABLISH CONNECTION FOR USER: alarm on PORT 22 TO 192.168.1.84
CONNECTION: pid 78534 waiting for lock on 9
CONNECTION: pid 78534 acquired lock on 9
paramiko: The authenticity of host '192.168.1.84' can't be established.
The ssh-rsa key fingerprint is 54e12e8153e0319f450934d606dca7df.
Are you sure you want to continue connecting (yes/no)?
yes
CONNECTION: pid 78534 released lock on 9
<192.168.1.84> EXEC ( umask 22 && mkdir -p "$( echo $HOME/.ansible/tmp/ansible-tmp-1454502995.07-263327298967895 )" && echo "$( echo $HOME/.ansible/tmp/ansible-tmp-1454502995.07-263327298967895 )" )
<192.168.1.84> PUT /var/folders/39/t0dm88q50dbcshd5nc5m5c640000gn/T/tmp5DqywL TO /home/alarm/.ansible/tmp/ansible- tmp-1454502995.07-263327298967895/setup
<192.168.1.84> EXEC LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 /usr/bin/python /home/alarm/.ansible/ tmp/ansible-tmp-1454502995.07-263327298967895/setup; rm -rf "/home/alarm/.ansible/tmp/ansible-tmp-1454502995. 07-263327298967895/" > /dev/null 2>&1
192.168.1.84 | SUCCESS => {
"ansible_facts": {
"ansible_all_ipv4_addresses": [
"192.168.1.84"
],