在ansible playbook中运行一个任务时,如何切换或成为另一个远程用户?

在ansible playbook中运行一个任务时,如何切换或成为另一个远程用户?,ansible,Ansible,我试图在远程机器上以不同的用户身份登录时运行一个命令,而不是最初使用ansible通过ssh登录 在我的远程机器上,我有: -乌瑟拉 -用户B 我使用ssh作为userA,运行多个任务,并希望切换到userB来运行诸如“conda list”之类的命令,以测试环境是否适用于userB 实际上,我想在ansible中做的是一项任务: 以用户身份将ssh连接到远程计算机 表演sudo-su 然后是苏苏苏尔b 我试图修改我的剧本,使之成为用户,并成为一个新的用户。此外,通过广泛的谷歌搜索和堆栈溢出,我

我试图在远程机器上以不同的用户身份登录时运行一个命令,而不是最初使用ansible通过ssh登录

在我的远程机器上,我有: -乌瑟拉 -用户B

我使用ssh作为userA,运行多个任务,并希望切换到userB来运行诸如“conda list”之类的命令,以测试环境是否适用于userB

实际上,我想在ansible中做的是一项任务:

  • 以用户身份将ssh连接到远程计算机
  • 表演sudo-su
  • 然后是苏苏苏尔b
  • 我试图修改我的剧本,使之成为用户,并成为一个新的用户。此外,通过广泛的谷歌搜索和堆栈溢出,我看到了been_方法:su

    这是我的剧本

      - name: verify conda install by conda list command
        command: ls
        become: yes
        become_user: "{{user}}"
        become_method: su
        become_flags: "su - root -c"
        register: out
        tags: conda_verify
    
    其中{{user}}在默认情况下定义为userB

    以下是错误的输出:

    TASK [anaconda-install : verify conda install by conda list command] 
    FAILED! => {"changed": false, "module_stderr": 
    "Shared connection to 10.66.144.68 closed.\r\n", "module_stdout": "No passwd entry for user 'su'\r\n", "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error", "rc": 1}
    
    现在如果我删除playbook命令

    成为_标志:“su-root-c”

    playbook然后超时等待密码

    FAILED! => {"msg": "Timeout (12s) waiting for privilege escalation prompt: "}
    

    您可以使用以下内容:

    - name: install required packages
      yum:
        name: maven
      become: yes
      become_user: userB
    
    执行时,请确保从命令行传递额外变量,如下所示:

    ansible-playbook user_switch.yml --extra-vars "ansible_become_password=<Password of userB>"
    
    ansible playbook user\u switch.yml——额外变量“ansible\u been\u password=”
    

    另外,根据您使用sudo切换的系统配置,请检查ansible配置中的“ask_sudo_pass”(询问sudo通行证)。

    您可以使用类似以下内容:

    - name: install required packages
      yum:
        name: maven
      become: yes
      become_user: userB
    
    执行时,请确保从命令行传递额外变量,如下所示:

    ansible-playbook user_switch.yml --extra-vars "ansible_become_password=<Password of userB>"
    
    ansible playbook user\u switch.yml——额外变量“ansible\u been\u password=”
    

    另外,根据您使用sudo切换的系统配置,检查ansible配置中的“ask_sudo_pass”(询问sudo密码)。

    在切换到userB之前,您是否需要切换到root用户?例如,直接从userA切换到userB有任何限制吗?在userB之前切换到root没有任何限制,这只是以交互方式且无需输入密码的最佳方式。在切换到userB之前,您是否特别需要切换到root?ie.直接从userA切换到userB有任何限制吗?在userB之前切换到root没有任何限制,这只是交互操作的最佳方式,无需输入密码。您好@saurabh14292谢谢您的回答,我确实遇到了一个需要sudo su的用例。我想用用户HDFS在HDFS文件系统上创建一个目录。使用root我无法在hadoop文件系统中创建目录。您的示例可能仍然适用于其他用例,我仍然需要测试它outHi@saurabh14292谢谢您的回答我确实遇到了一个需要sudo su的用例。我想用用户HDFS在HDFS文件系统上创建一个目录。使用root我无法在hadoop文件系统中创建目录。您的示例可能仍然适用于其他用例,我仍然需要对其进行测试