一直想做Ansible自动化,于是就查看ansible的官网和加入各种ansible群, 但是发现都是吹水的,于是就百度,google.
我心中的自动期望ansible可以做到执行下面的命令即可完成自动任务.
ansible-playbook -i hosts task.ym
最初始想完成这个是使用一个shell脚本, 在脚本中使用ansible-playbook和使用expect获取提示自动输入密码, 但是总感觉太臃肿. 所以找到以下方法:
1阶段:使用脚本获取提示输入密码;
2阶段:在ansible的inventory中添加内置参数,遇到使用密码+密钥无法登录问题,解决这个问题;
以下是2阶段遇到问题和解决问题的过程:
一般情况和自己测试场景还是有些小不同. 例如在登录认证这块.
ssh登录一般有: 密码,密钥, 密钥+密码 三种.
测试时使用密码或者单密钥据多, 当遇到密钥+密码时可能就会有些不一样的地方了.
单使用密码时:
可以直接在ansible 的inventory里面加入
[group]
192.168.1.1 ansible_password=PASSWORD
[group:vars]
ansible_password=PASSWORD
使用这种方式需要安装另外一个工具 sshpass, 使用 yum install -y sshpass 或者 源码安装(noted:如果没有找到合适的yum源)
我是在这里找到sshpass工具
单使用密钥时:
使用密钥时只需要将ansible_password 改为 ansible_ssh_private_key_file 即可.
使用密码+密钥时:
如果单纯的将 ansible_password 和 ansible_ssh_private_key_file 加入 inventory中, 在执行命令时会卡着没有任何提示, 即使在ansible-playbook命令后加 "-vvv" 也看不到为什么卡着.
但是执行sshpass命令之后可能你就会发现问题了. (noted:执行sshpass命令时加上 -v参数), 默认情况下使用的是普通的ssh client, 在使用sshpass是提示"passphrase", 但是sshpass的默认prompt是要匹配"assword". 所以在使用sshpass时会出现类似expcet工具没有匹配到目标而等待.
在网上找到使用paramiko作为ssh连接client则可以完美运行.
在inventory中加上下面的内容即可
ansible_password=PASSWORD
ansible_ssh_private_key_file=PATH_KEYFILE
ansible_connection=paramiko
不过官网也有解决文档:(noted:但是没有发现sshpass时不知道可以用paramiko)