【Ansible】Ansible 連線主機顯示報錯的處理方案

樂維君_發表於2018-12-13

一、在ansible安裝完畢後一般需要以SSH的方式連線到需要進行管理的目標主機,一開始遇到了如下問題:

192.168.15.4 | UNREACHABLE! => {
    "changed": false, 
    "msg": "Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).\r\n", 
    "unreachable": true
}
192.168.15.55 | UNREACHABLE! => {
    "changed": false, 
    "msg": "Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).\r\n", 
    "unreachable": true


原因分析:
沒有在ansible管理節點(即安裝ansible的節點)上新增目標節點(即需要管理的節點)的ssh認證資訊。

解決步驟:

1:管理節點生成SSH-KEY
#ssh-keygen
成功後在~/.ssh/路徑下將生成ssh金鑰檔案:id_rsa及id_rsa.pub
2:新增目標節點的SSH認證資訊
#ssh-copy-id root@目標節點IP
這裡root是在目標節點上登入的使用者,@符號後面接目標節點IP即可,之後會提示輸入目標節點root使用者密碼,輸入即可。
新增認證資訊後,目標節點主機的~/.ssh/目錄下將會出現一個authorized_keys檔案,裡面包含了ansible管理節點的公鑰資訊,可以檢查一下是否存在。
3:在確定目標主機的SSH認證資訊都已正確新增且目標主機的~/.ssh/目錄都存在管理節點的公鑰資訊後,再執行之前出錯的ansible ping指令:

#ansible -m ping all
192.168.15.4 | SUCCES對之前未連線的主機進行連結時報錯如下:S => {
    "changed": false, 
    "ping": "pong"
}
192.168.15.55 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}


二、對之前未連線的主機進行連結時報錯如下:

[root@puppet ~]# ansible webservers -m command -a 'ls ~' -k
SSH password: 
192.168.15.10 | FAILED | rc=0 >>
Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this.  Please add this host's fingerprint to your known_hosts file to manage this host.

解決步驟:

修改ansible.cfg檔案

vi /etc/ansible/ansible.cfg


找到以下行,讓host_key_checking=False這行生效

# uncomment this to disable SSH key host checking
host_key_checking = Fals


三、ansible requires a json module, none found!

SSH password:192.168.15.123 | FAILED >> {   "failed": true,   "msg": "Error: ansible requires a json module, nonefound!",   "parsed": false

解決步驟:
python版本過低,要不升級python要不就升級安裝python-simplejson。yum install -y python-simplejson

四、第一次系統初始化執行生成本機ansible使用者key時報錯

failed: [127.0.0.1] =>{"checksum": "f5f2f20fc0774be961fffb951a50023e31abe920","failed": true}msg: Aborting, target uses selinux but pythonbindings (libselinux-python) aren't installed!FATAL: all hosts have already failed –aborting

解放步驟:
yum install libselinux-python -y

五、使用命令報錯

·····Traceback (most recent call last):  File "/usr/bin/ansible", line 197, in <module>    (runner, results) = cli.run(options, args)  File "/usr/bin/ansible", line 163, in run    extra_vars=extra_vars,  File "/usr/lib/python2.6/site-packages/ansible/runner/__init__.py", line 233, in __init__    cmd = subprocess.Popen(['ssh','-o','ControlPersist'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)  File "/usr/lib64/python2.6/subprocess.py", line 639, in __init__    errread, errwrite)  File "/usr/lib64/python2.6/subprocess.py", line 1228, in _execute_child    raise child_exceptionOSError: [Errno 2] No such file or directory

解決步驟:
yum install openssh-clients


原文地址

Ansible 連線主機顯示報錯的處理方案

(出處: 樂維_一站式運維監控管理平臺)


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31561206/viewspace-2285108/,如需轉載,請註明出處,否則將追究法律責任。

相關文章