2016-02-02 40 views
0

我試探上樹莓派2新安裝的Archlinux安裝像這樣:Ansible 2.0.0.2:ansible不尊重「 - U」開關

ansible -i PI2 arch -m setup -c paramiko -k -u alarm -vvvv

這種讀取對我說:在與用戶「警報」連接的IP上激發設置模塊,詢問該特定用戶的密碼。但最終嘗試連接的用戶是「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

有些事情可能會或可能不相關的有以下幾種:

  • SSH不允許通過root登錄
  • 須藤未安裝
  • 默認用戶和傳球是「報警」:「報警」
  • 沒有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 -u and REMOTE_USER:`

原來的問題似乎依然不過。在清單中沒有提及ansible_user,爲什麼使用root而不是通過- u明確提及的用戶?

EDIT_END

這是預期的行爲?

感謝

+0

「正在用root爲什麼...」這是因爲你是最有可能'在你的劇本中有「root:yes」 – sircapsalot

+0

請記住,這是一個通過'ansible'而不是'ansible-playbook'進行的臨時執行。此外,在Ansible 2中,我認爲'ansible_ssh_user'已被重命名爲'ansible_user'。乾杯 – Ralph

+0

我還是習慣了1.9 :)對不起我的無知2.0 – sircapsalot

回答

0

我virtualenv'd自己一個Ansible 1.9.4沙盒,複製了ansible.cfg和庫存,並再次運行該命令。均田和預期一樣:

⤷ 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

從我站在那裏我會說這是一個錯誤。也許有人可以證實?!這一切都在錯誤追蹤系統,然後...

乾杯

編輯

爲了簡便起見我遺漏了我的清單文件,並最終負責行爲的一個重要組成部分。它看起來像這樣:

[hypriot]

192.168.1.18 ansible_user =根

[拱]

192.168.1.18

從Ansible錯誤追蹤引用:

清單中使用的名稱是字典中的關鍵字。因此,作爲主機特定變量放在那裏的所有內容都將合併成一個大字典。這意味着在一些相互衝突的情況下,變量會被其他值取代。

您可以通過對同一主機使用不同的名稱(例如,使用IP地址和主機名,別名或DNS別名)來防止這種情況,並且在這種情況下,您仍然可以執行您喜歡的操作。

所以,我的庫存看起來像現在這樣:

[hypriot]

hypriot_local ansible_host = 192.168.1.18 ansible_user =根

[的archlinux]

arch_local ansible_host = 192.168。 1.18

這工作正常。 Ansible跟蹤器上的相應問題在這裏:https://github.com/ansible/ansible/issues/14268

0

您不需要將paramiko指定爲連接類型,Ansible會將該部分指定出來。您可能有一個group_vars目錄,其中ansible_useransible_ssh_user變量爲該主機定義,可能會覆蓋警報用戶。

我能夠複製您的ansible 2.0.0.2測試沒有針對樹莓派2的任何問題,運行Raspian:

➜ 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" 
     ], 
+0

是的,謝謝你測試戴夫。那麼,最後事實證明,Ansible 2尊重'-u'開關。 Ansible 1.9.4在這方面的表現方式相同。這是/我的庫存讓事情搞砸了。我省略了一部分,結果變得很重要。我會編輯我的答案來澄清。 – Ralph