Ansible 2.0.0.2:ansible不尊重" - u"开关

时间:2016-02-02 14:54:13

标签: ansible ansible-2.x

我正在尝试在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

有些可能相关或不相关的事情如下:

  • 不允许通过root进行ssh登录
  • 未安装sudo
  • 默认用户和通行证是&#34;闹钟&#34; :&#34;闹钟&#34;
  • 没有将ssh密钥复制到机器上,因此paramiko连接尝试

未被忽略并导致连接成功的是将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

这是预期的行为吗?

由于

2 个答案:

答案 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_useransible_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"
        ],