执行过程是,ansible接收动态的hosts与本地的私钥,通过无密码登录方式运行一个playbook,但是运行后始终出现如下问题:
PLAY [120.27.26.*] ************************************************************
TASK [setup] *******************************************************************
[1;31mfatal: [120.27.26.*]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh.", "unreachable": true}
to retry, use: --limit @/home/wxd/project/ansible_ui/projects/16/.tmp/fdeb167c-3705-11e6-8570-080027082f96.retry
PLAY RECAP *********************************************************************
120.27.26.* : ok=0 changed=0 [1;31munreachable[1;31m=[1;31m1 failed=0
1. 联想到后面如果接密码参数 --ask-pass时始终都能成功运行,所以才想到可能是密钥的问题,随后网上查了一下,需要改成600的权限才能正常运行,
chmod 600 /root/xxx.pem
再运行就正常了
2. 如果在后面加上 -vvvv的参数,可以查看到详情报错如下:
Aborting, target uses selinux but python bindings (libselinux-python) aren't installed!
执行
yum install libselinux-python -y
安装后就可以运行了
TASK [setup] *******************************************************************
ok: [218.75.159.*]
TASK [include] *****************************************************************
included: /home/wxd/project/ansible_ui/projects/cdl2/playbooks/modify_sync_conf.yml for 218.75.159.*
TASK [insert some lines in /tmp/sync.conf, not in /usr/local/btsync/sync.conf] *
ok: [218.75.159.*]
PLAY RECAP *********************************************************************
218.75.159.* : ok=3 changed=0 unreachable=0 failed=0
如果都配置好了,还是登录需要密码,可以在后面加个参数-v,以打印详细的连接状态,如下:
ssh root@1.2.3.4 -p 22 -v
注意也有可能是防火墙打开了,所以最好是检查一下,
# getenforce
如果打开就关闭:
# setenforce 0
------------------------------------
可以在命令后面加上-vvv查看详细的输出结果,有可能是用户的私钥配置不正确
也有可能是.ssh/config文件未配置正确
-------------------------------------------------------------------------------------
有时在用paramiko部署密钥时会出现如下错误:
deploy Error: ('x.x.x.x', , )
一般 原因是可能在跳板机中已经存在 这个ip的相关信息,请把known_host这个文件 删除 ,然后重试就好了