Ansible调用authorized_key模块推送SSH密钥报需sshpass错误
问题根因
报错发生在**Gathering Facts(事实收集)**阶段,此时Ansible尚未和远程主机建立SSH连接,根本没有执行到公钥拷贝的任务逻辑,因此修改playbook里的key参数(不管是写本地公钥路径还是GitHub公钥地址)都无法解决该报错。
核心触发原因:Ansible使用密码方式做SSH认证时,必须依赖sshpass工具完成非交互式密码传递,你当前使用的Mac设备本地未安装该工具,导致连接流程直接中断。
解决方法
1. 在Mac本地安装sshpass
Mac默认的Homebrew官方源未直接收录sshpass(协议兼容原因),通过第三方源安装即可:
brew install hudochenkov/sshpass/sshpass
安装完成后执行以下命令验证,能正常输出版本信息即安装成功:
sshpass -V
2. 重新执行playbook
回到ansible工作目录,重新执行原下发命令,按提示输入远程主机的SSH密码即可正常运行:
ansible-playbook -i inventory.yaml ssh.yaml --ask-pass
补充说明
- 如果执行时出现主机密钥校验失败的报错,在命令中追加参数跳过首次连接的指纹确认即可:
ansible-playbook -i inventory.yaml ssh.yaml --ask-pass --ssh-common-args='-o StrictHostKeyChecking=no' - 将
key参数配置为GitHub公钥地址的写法本身是有效的,ansible.posix.authorized_key模块支持直接拉取远程公钥链接的内容,但该逻辑是在本地控制端执行的,和远程SSH连接阶段的报错没有关联。 - 公钥成功下发到远程主机后,后续执行Ansible任务无需再加
--ask-pass参数,直接走SSH密钥认证即可。
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

