linux Ansible 自动输入密码登录

一直想做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)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章