覆盖 ansible 默认 ssh_user

覆盖 ansible 默认 ssh_user

在我使用 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在您的剧本顶部设置。

相关内容