---
- hosts: vagrant
remote_user: root
become_method: sudo
tasks:
- name: Start service docker, if not running
service:
name: docker
state: started
错误:致命:[192.168.1.16]:失败! => {“已更改”:false,“msg”: “无法启动服务泊坞:无法启动docker.service: 需要交互式身份验证。\ n请参阅系统日志和'systemctl 状态docker.service'了解详情。\ n“}
我想使用Ansible启动Docker到其他主机(Vagrant)。我可以和Ansible一起ping两个主机。但它不适用于Vagrant主持人。
知道如何解决这个问题吗?
答案 0 :(得分:2)
在使用默认设置的Vagrant中使用Ansible配置程序时,将忽略playbook中的remote_user
设置(问题中为remote_user: root
)。
"常规"之间有一个important difference Ansible中关于优先级的变量和连接变量:
要考虑的另一个重要事项(对于所有版本)是连接变量覆盖config,命令行和播放/角色/任务特定选项和指令。例如:
ansible -u lola myhost
这仍将作为ramon连接,因为ansible_ssh_user在myhost的库存中设置为ramon。对于播放/任务,对于remote_user也是如此:
- hosts: myhost tasks: - command: i'll connect as ramon still remote_user: lola
这样做是因为特定于主机的设置可以覆盖常规设置。
由于您使用的是Vagrant,它会在目录.vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory
下创建一个清单文件,默认情况下(也取决于框的侮辱)指定内部ansible_user='vagrant'
,这意味着{{1被默认设置覆盖。
Vagrant docs中也提到了这一点:
remote_user: root
(布尔值) - 要求Vagrant在生成的库存中设置force_remote_user
设置,或在使用静态库存时作为额外变量。 然后,所有Ansibleansible_ssh_user
参数将被Vagrant SSH设置的remote_user
值覆盖。如果此选项设置为
config.ssh.username
,Vagrant会将Vagrant SSH用户名设置为默认的Ansible远程用户,但仍会考虑Ansible游戏或任务的false
参数,从而覆盖Vagrant配置。默认值为
remote_user
。
你可以:
通过将true
添加到整个游戏或单个任务来修改您的游戏;
在Vagrant文件中将become: true
设置为force_remote_user
;
在Vagrantfile中将false
设置为config.ssh.username
。
第一个是更好的方式。
答案 1 :(得分:-2)
需要交互式身份验证 似乎远程运行 sudo 命令的用户需要sudo操作的密码,因为没有提供它的终端,它就会失败。
尝试使用有权运行sudo命令的远程用户,而无需进行身份验证。
您还可以使用“ansible_sudo_pass”指定远程提供的密码。