所以我试图在Ansible中使用角色,我不知道如何告诉Ansible使用特定用户来ssh
所以我有两个文件
site.yml
- hosts: _uat_web
- import_playbook: ../static-assignments/uat-webservers.yml
uat-webservers.yml
---
- hosts: _uat_web
remote_user: ec2-user
roles:
- webservers
因此,如果我运行可执行的操作手册uat-webservers.yml所有都能按预期运行,但我们的想法是让site.yml调用uat-webervers.yml
因此,当我运行易理解的剧本网站.yml时,我会遇到问题
UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: ubuntu@ec2-xx-xxx-xxx-xxx.compute-1.amazonaws.com: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).", "unreachable": true}
我知道问题是目标机器正在使用Red Hat,因此我需要用户ec2用户才能使用ssh。
我尝试将remote_user:ec2-user放入站点。yml不起作用。仅供参考,我正在Ubuntu机器上执行易解析的剧本,这就是为什么它默认为Ubuntu用户
- hosts: _uat_web #uat-webservers
- remote_user: ec2-user
- import_playbook: ../static-assignments/uat-webservers.yml
此外,我使用的是动态库存aws_ec2,我知道对于静态库存,你可以在库存中指定用户。我喜欢剧本中的解决方案,比如remote_user,它在使用导入时似乎不起作用。谢谢
在site.yml
中,这一行本身不起任何作用(除了收集事实)。因此,它是多余的,可以删除。
- hosts: _uat_web
因此,如果删除了该行,那么import_playbook应该自己工作。即
# site.yml
- import_playbook: ../static-assignments/uat-webservers.yml
如果你真的想要这个部分,因为你想在导入剧本之前运行一些东西,那么就做:
# site.yml
- hosts: _uat_web
remote_user: ec2-user # Notice this line doesn't start with a "-" like it did in your example
tasks: # or roles:
...
- import_playbook: ../static-assignments/uat-webservers.yml
编辑:
一旦解决了UNREACHABLE错误,我想您可能会遇到另一个错误,它找不到角色。我不确定您的目录结构是如何设置的,但当您使用import_playbook
时,导入的剧本将查找相对于自身的角色。
Ie。您的../static-assignments/uat-webservers.yml
剧本调用了webservers
角色,然后它将尝试在该路径中可能不存在的../static-assignments/roles/webservers
中找到它。
一些潜在的解决方案是研究ansible.cfg
中的roles_path
设置。或者可能使用符号链接指向您的主要角色目录。