在我使用 ansible 的 99% 的时间里,我使用 hosts 文件中指定的 ansible_ssh_user。另外 1% 的时间里,这个用户不存在,我需要使用默认用户来创建它。我该如何运行剧本,让它覆盖 hosts 文件中的 ansible_ssh_user?
我尝试了以下操作:
ansible-playbook my-playbook.yaml --user default --ask-pass
但这仍然产生以下错误:
fatal: [target]: UNREACHABLE! => {"changed": false, "msg": "Invalid/incorrect password: Permission denied, please try again.", "unreachable": true}
只有在我注释掉 hosts 文件中的 ansible_ssh_user 后它才起作用,但每次都注释/取消注释此行会非常不方便。
答案1
您可以在 ansible-playbook 命令行上传递额外的变量来重新定义 Ansible 用户。例如:
ansible-playbook .... --extra-vars "ansible_ssh_user=nobody"
手册页上写道:
-e, --extra-vars
set additional variables as key=value or YAML/JSON, if filename
prepend with @
因此,您可以传递键/值对、YAML、JSON 或包含要使用的变量的文件。但单个键值对可能就足够了。
现在是检查配置过程的好时机。例如,我确保在我的所有 kickstart 中都使用正确的 ssh authorized_keys 创建了 ansible 用户。
答案2
除了 Michael 的正确答案之外,您还可以ANSIBLE_REMOTE_USER
在环境中指定、remote_user
在 ansible.cfg 中设置和/或remote_user
在您的剧本顶部设置。