使用SUDO用户覆盖Ansible SSH登录用户

时间:2016-10-05 21:20:47

标签: jenkins ssh ansible ansible-playbook ansible-2.x

我遇到需要覆盖默认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

3 个答案:

答案 0 :(得分:4)

有两种类型的用户:

  • 远程用户 - Ansible与此帐户建立SSH连接
  • 成为用户 - Ansible'变为'此用户 建立SSH连接后

在您的设置中,Ansible始终与TargetUser1关联,并且在使用TargetUser2进行连接后,给定游戏尝试成为TargetUser1

根据您的描述,我们了解您可以使用TargetUser1连接到远程信箱,并可以与JenkinsUser联系成为TargetUser2
在这种情况下,您可以执行以下操作:

- hosts: dev
  remote_user: JenkinsUser
  become: true
  become_method: sudo
  become_user: TargetUser2

您可以为游戏或特定任务设置remote_userbecome_user

答案 1 :(得分:0)

您观察到的行为听起来很合乎逻辑。 ansible_ssh_user是要连接的用户名,而became方法只会在登录主机后使用。

您可以尝试一些想法:

  • sudo
  • 上为TargetUser1添加TargetUser2权限,使其成为dev
  • 在播放期间即时更改ansible_ssh_user(例如,使用set_fact)或
  • TargetUser1@devTargetUser2@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