ansible与默认远程用户连接,即使我指定了另一个远程用户

ansible与默认远程用户连接,即使我指定了另一个远程用户,ansible,Ansible,我使用宿主提供的ansible模块创建了一个虚拟linux服务器。这个很好用。 下一个任务应使用添加用户“ansible” - include: task-files/users_create_ansible_user.yml delegate_to: '{{ createdserver.ipv4_address }}' remote_user: root 正如您所看到的,我在这里添加了remote_用户(我还将其添加到包含的任务中) 但是,尽管有这两个remote_用户条目,

我使用宿主提供的ansible模块创建了一个虚拟linux服务器。这个很好用。 下一个任务应使用添加用户“ansible”

- include: task-files/users_create_ansible_user.yml
    delegate_to: '{{ createdserver.ipv4_address }}'
    remote_user: root
正如您所看到的,我在这里添加了remote_用户(我还将其添加到包含的任务中)

但是,尽管有这两个remote_用户条目,它仍会尝试与ansible.cfg中设置的remote_用户连接(在这里,我将remote_用户设置为“ansible”,因为我希望在创建该用户后,使用该用户执行以下所有任务)

更多详情:

这是包含的任务文件中的第一个任务(失败)

返回

fatal: [localhost]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: ansible@116.203.119.43: Permission denied (publickey,password).", "unreachable": true}'
正如您所看到的,它没有连接到指定的远程用户:root,而是连接到用户“ansible”(尚未创建)。当我将ansible.cfg中的远程用户更改为root用户时,它可以在这里连接

有人能告诉我我的误解吗?

Q:“不与指定的远程用户root连接,而是与用户‘ansible’连接。”

答:
remote\u user
很可能被变量
ansible\u user
覆盖。该变量具有更高的值。见最后一节。比如说


-设定事实:
ansible_用户:管理员
-命令:哇
远程用户:root
寄存器:结果
-调试:
var:result.stdout
给予

“result.stdout”:“admin”
如果没有变量
ansible\u user
,这应该可以工作。是在任务级别定义的。比如说,

-命令:whoami
远程用户:管理员
寄存器:结果
-调试:
var:result.stdout
-命令:哇
远程用户:root
寄存器:结果
-调试:
var:result.stdout
给予

“result.stdout”:“admin”
“result.stdout”:“root”

调试

将调试任务放入代码中,并查看变量
ansible\u user
的值。比如说

-调试:
var:ansible_用户
-名称:“创建“ansible”用户”
远程用户:root
用户:
名称:“ansible”

使用
ansible\u用户

如果没有任何机会覆盖该值,请使用
ansible\u user

另请参见SSH connect插件的参数<代码>远程用户是Ansible配置中的参数。相反,也可以使用变量
ansible\u user
从剧本或任务中更改远程用户。该变量具有最高的可用性。见最后一节。比如说

-命令:whoami
寄存器:结果
变量:
ansible_用户:管理员
-调试:
var:result.stdout
-命令:哇
寄存器:结果
变量:
ansible_用户:root
-调试:
var:result.stdout
按预期工作并给予


“result.stdout”:“admin”
“result.stdout”:“root”
}
是使用ssh代理提供的私钥密码进行
公钥身份验证


禁用root登录

但是,最好的做法是:“使用一个普通的用户帐户,与sudo一起启动您的连接。”

-命令:whoami
寄存器:结果
变成:真的
方法:sudo
成为用户:root
变量:
ansible_用户:管理员
-调试:
var:result.stdout
给予

“result.stdout”:“root”
当然,必须允许远程用户管理员
sudo

root@test_01>cat/usr/local/etc/sudoers
...
admin ALL=(ALL)NOPASSWD:ALL

优先级

有必要了解,从播放到任务级别,许多配置参数都可以被变量覆盖。在大多数情况下,这些变量都是通过添加前缀
ansible\uu
从参数名称创建的。变量
ansible\u user
和参数
remote\u user
是一个异常(FWIW,我不知道还有其他异常)

同样重要的是要记住

例如,也可以指定为变量。比如说

-命令:whoami
寄存器:结果
变量:
ansible_用户:管理员
答案是:真的
ansible_成为_方法:sudo
ansible_成为用户:root
-调试:
var:result.stdout
给予

“result.stdout”:“root”

非常感谢您的回答!我会尽快接受的。也许你想看看下面的问题:)
fatal: [localhost]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: ansible@116.203.119.43: Permission denied (publickey,password).", "unreachable": true}'