Ansible命令行传递SSH用户名密码执行playbook失败如何解决
根因分析
host_key_checking = false属于Ansible全局配置文件ansible.cfg的[defaults]段专属配置项,你将它写在了inventory配置hosts.ini中,该配置完全不生效,Ansible默认保持SSH主机密钥校验开启状态。- 你使用的sshpass工具不支持交互式确认未知主机的密钥指纹,在校验开启的场景下用密码走SSH连接,会直接触发本次报错。
- 你之前删除错误位置配置、修改密码变量名的操作,均没有解决核心的主机密钥校验开启问题,因此报错持续存在。
解决方案
你可以根据使用场景任选以下任意一种方案解决问题:
方案1:新增ansible.cfg全局关闭校验
在执行playbook的同级目录下创建ansible.cfg文件,写入以下内容即可,该配置对同目录下所有Ansible命令生效:[defaults] host_key_checking = false额外提示:你的
hosts.ini里的[defaults]段属于无效配置,可以直接删除避免后续混淆。方案2:执行命令时临时关闭校验
无需修改任何配置文件,直接在playbook执行命令中新增SSH参数即可,完整命令参考如下:ansible-playbook -i hosts.ini main.yml \ --extra-vars "ansible_sudo_pass=你的Sudo密码 ansible_user=你的SSH用户名 ansible_password=你的SSH密码" \ --ssh-common-args='-o StrictHostKeyChecking=no'注意:你原命令中的
$(ansible_password)是从Shell环境变量取值的写法,需确认你提前在当前Shell中导出了对应变量,否则可以直接替换为实际的账号密码值。方案3:手动添加主机密钥到本地信任列表
适合长期使用固定目标主机的场景,仅需执行一次以下命令,即可永久将目标主机指纹加入本地信任列表:ssh-keyscan 10.1.5.4 >> ~/.ssh/known_hosts执行完成后再运行playbook即可正常连接。
内容的提问来源于stack exchange,提问作者Vidya
相关产品推荐
相关产品推荐

