我遇到需要覆盖默认SSH ansible连接的情况。我们使用Jenkins代理作为ansible master,我们在" JenkinsUser"之间建立了SSH设置。 (詹金斯)和" TargetUser1" (目标)并已在清单文件中定义
tabsHideOnSubPages
现在,在同一台目标机器上,我有另一组任务由" TargetUser2"和" TargetUser1"无权运行这些权限。但是,同样的" JenkinsUser"拥有SUDO对#U; TargetUser2"的许可。我的剧本看起来像,
true
预期结果:JenkinsUser将SSH目标主机和sudo到TargetUser2,覆盖默认的SSH设置到TargetUser1。
运行时结果:SSH连接发生在TargetUser1而不是JenkinsUser,而remote_user:JenkinsUser应该覆盖默认的ansible_ssh_user
Ansible-playbook -vvv输出:
[dev:vars]
ansible_ssh_user=TargetUser1
答案 0 :(得分:4)
有两种类型的用户:
在您的设置中,Ansible始终与TargetUser1
关联,并且在使用TargetUser2
进行连接后,给定游戏尝试成为TargetUser1
。
根据您的描述,我们了解您可以使用TargetUser1
连接到远程信箱,并可以与JenkinsUser
联系成为TargetUser2
。
在这种情况下,您可以执行以下操作:
- hosts: dev
remote_user: JenkinsUser
become: true
become_method: sudo
become_user: TargetUser2
您可以为游戏或特定任务设置remote_user
和become_user
。
答案 1 :(得分:0)
您观察到的行为听起来很合乎逻辑。 ansible_ssh_user
是要连接的用户名,而became
方法只会在登录主机后使用。
您可以尝试一些想法:
sudo
或TargetUser1
添加TargetUser2
权限,使其成为dev
ansible_ssh_user
(例如,使用set_fact
)或TargetUser1@dev
和TargetUser2@dev
或ansible_ssh_user
设置为JenkinsUser
并使用become_user
TargetUser1
/ TargetUser2
进行每个任务答案 2 :(得分:0)
清单:
[dev:vars]
ansible_ssh_user=TargetUser1
剧本:
- hosts: dev
tasks:
- command: whoami
命令:
ansible-playbook -i inventory playbook.yml -e "ansible_ssh_user=JenkinsUser ansible_ssh_pass={{JenkinsUserPassword}}
Ansible只处理3个用户,本地,远程和成为。 become_user必须来自remote_user。我的需求是让local_user
成为become_user
这是不可能的,因此我在额外的变量库中覆盖了广告资源中的默认ansible_ssh_user
。现在,become_user
将来自覆盖local_user