之前写过一个
Python+Ansible
实现
程序执行 adhoc 和 playbook的功能
,最近在开发运维平台的时候想直接把它拿过来复用,结果在新的环境执行的时候会因为主机没有添加到 know_hosts文件导致卡住,也就是说 Ansible的 constant 配置的
HOST_KEY_CHECKING=False
未生效
两个环境的的ansible版本是不一致的。所以问题出现在ansible或者ansible-core的版本上。
接下来通过试验来验证
在试验之前,我们先对Ansible模块的版本进行说明
1、Ansible 版本
<= 2.9.9
时,只会安装一个模块
ansible 2.9.9
2、Ansible 版本 >= 3.0.0 and <= 3.4.0
时,安装的时候,依赖 ansible-base
模块
ansible 3.4.0
ansible-base 2.10.17
3.4.0 再往上版本就是4.0.0了
3、Ansible 从 4.0.0 版本开始安装的时候,依赖 ansible-core
模块
ansible 4.0.0
ansible-core 2.11.12
具体的Ansible模块的版本列表详见 https://mirrors.aliyun.com/pypi/simple/ansible/
试验用的脚本参考 test_ansible.py
1、这里对4.0.0以下版本版本,选择 2.9.9 和 3.4.0 两个版本为代表,进行试验,是没有问题的。可以证明 <= 3.4.0
版本的都没有问题
2、因为当前项目环境都是 ansible 4.0.0 以上的版本,所以重点验证
验证的方法是: 采用 Ansible 第二位 版本号升位,分别执行上述脚本。
这里需要说明的是:
如果当前版本验证成功的话,验证下一个版本,一定要换一个主机进行验证
1)验证成功的话肯定会在 know_hosts 文件添加对应的记录
2)这个时候即使手动删除 know_hosts 文件中对应的记录,假设下个版本本应该失败,但是也会成功
, 应该是本身做了一些缓存(这里暂未研究缓存在哪里)
最终经过测试验证
key的检测是依赖于 ansible-core, 该模板的最高有效版本是 2.11.6
, 而从下面获取的版本依赖记录 来看, ansible 4.10.0 最低支持 2.11.7
, ansible 4.9.0 支持 2.11.6 到 2.12
版本依赖关系
ansible 4.10.0 requires ansible-core~=2.11.7, but you have ansible-core 2.12.7 which is incompatible.
ansible 4.9.0 requires ansible-core<2.12,>=2.11.6, but you have ansible-core 2.12.0 which is incompatible.
ansible 5.0.1 requires ansible-core<2.13,>=2.12.0, but you have ansible-core 2.11.6 which is incompatible.
所以正常安装之后默认的最高有效版本及依赖是 Ansible 4.9.0 + Ansible-core 2.11.6
根据上面的试验结论,最高有效版本是 Ansible 4.9.0 + Ansible-core 2.11.6
, 难道就不能用最新的版本了吗?
当然不是 ~
我们通过ansible的源码分析(源码位置 site-packages/ansible/config/base.py)知道配置了很多的环境变量, ansible 常量 HOST_KEY_CHECKING
对应的env
是 ANSIBLE_HOST_KEY_CHECKING
,对应的ini
配置文件是 defaults
section中的 host_key_checking
那么我们就有一种更快速的解决该问题的办法,就是在执行 runner 之前通过os.environ.setdefault
来设置对应的环境变量
os.environ.setdefault('ANSIBLE_HOST_KEY_CHECKING', 'False')
再次验证,没有了要检测 know_hosts 文件的过程,程序顺利执行
如果觉得文章对你有所帮忙,欢迎点赞收藏,或者可以关注个人公众号 全栈运维
哦
之前写过一个Python+Ansible实现执行程序执行 adhoc 和 playbook的功能,最近在开发运维平台的时候想直接把它拿过来复用,结果在新的环境执行的时候会因为主机没有添加到 know_hosts文件导致卡住....
ansible-known_hosts
使用 ansible 在 known_hosts 文件中添加或删除主机。
这对于您想要执行某些操作的新机器特别有用,例如将 'git' 模块与 ssh 一起使用。 如果您不准备 known_hosts 文件,ansible 将挂起,因为它正在等待您无法提供的输入。
将known_hosts bash 脚本复制到 ansible playbook 旁边的库文件夹中。 然后你可以定义一个这样的任务:
- hosts: myhosts
user: deploy
tasks:
- name: Ensure github is in the known_hosts file
known_hosts: host=github.com state=present
必需的。 要添加或删除的主机。 还将查找
[root@iZm5e79rtwsq2hm57teyk5Z ansible]# ansible aofeng -f 5 -m ping
192.168.1.106 | FAILED! => {
"failed": true,
"msg": "Using a SSH password instead of a key is not possible b...
1、ansible的配置文件hosts,如果配置了ssh_user,ssh_pass;但是配置文件ansible.cfg中开启host_key_checking 执行命令会失败,报错如下:
| FAILED | rc=-1 >>
Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this. Please
什么是StrictHostKeyChecking
使用ssh访问时,A通过ssh首次连接到B,B会将公钥1(host key)传递给A,在首次链接时,会弹出交互验证B的公钥1是否正确,如果正确则输入yes确认,A将公钥1存入known_hosts文件中,以后A再连接B时,B依然会传递给A一个公钥2,OpenSSH会核对公钥,通过对比公钥1与公钥2 是否相同来进行简单的验证,如果公钥不同,OpenSSH会发出警告, 避免你受到DNS Hijack之类的攻击。
但是如果程序自动链接ssh远端机器,就需要由程序自
一、Ansible入门
1、Ansible、Saltstack和Puppet是目前互联网IT使用最最广泛的自动化运维工具,主要是用于自动化管理、配置数以万计的服务器,具体可以对服务器做哪些管理呢?
修改、更新服务器配置文件;
创建目录、文件、删除;
执行各种SHELL命令,不支持交互模式指令;
查看服务器资源、CPU、MEM、DISK;
安装软件服务、启动、停止、重启。
2、Ansi...
转自:https://yq.aliyun.com/articles/288093
The authenticity of host 'IP' can't be established:ssh客户端登录Linux系统出错解决记录
在用ssh客户端第一次登录远程Linux的时候通常会报如下的错误
The authenticity of host 'IP' can't be established.
ECDSA key fingerprint is SHA256:+9UZGqPe/Rdaiz9jT
math.floor() & math.trunc()math.floor 和 math.trunc的官方不同版本的介绍如下:math.floor:
python2.7: Return the floor of x as a float, the largest integer value less than or equal to x.
python3.5: Return t