ssh - Ansible 无法使用不同用户在本地主机上创建文件夹

标签 ssh ansible sudo ansible-inventory

我正在使用 appuser 执行 ansible playbook,而我希望在本地主机上使用用户 webuser 创建文件夹。

ssh key 是在我的本地主机上为 Web 用户设置的。因此,使用 appuser 登录后,我可以简单地 ssh webuser@localhost 将用户切换到 webuser

注意:我没有 sudo 权限,因此无法 sudo 从 appuser 切换到 Webuser。

下面是我的剧本,它与用户 appuser 一起运行,但需要使用 webuser 在本地主机上创建一个文件夹 04May2020

- name: "Play 1"

  hosts: localhost
  remote_user: "webuser"
  vars:
    ansible_ssh_extra_args: -o StrictHostKeyChecking=no
    ansible_ssh_private_key_file: /app/misc_automation/ssh_keys_id_rsa

  tasks:
   - name: create folder for today's print
     file:
       path: "/webWeb/htdocs/print/04May2020"
       state: directory
     remote_user: webuser

但是,输出显示该文件夹是使用 appuser 而不是 webuser 创建的。查看显示使用 appuser 而不是 webuser 进行 ssh 连接的输出。

ansible-playbook /app/Ansible/playbook/print_oracle/print.yml -i /app/Ansible/playbook/print_oracle/allhosts.hosts -vvv

TASK [create folder for today] ***********************************
task path: /app/Ansible/playbook/print_oracle/print.yml:33
Using module file /usr/lib/python2.7/site-packages/ansible/modules/files/file.py
Pipelining is enabled.
<127.0.0.1> ESTABLISH LOCAL CONNECTION FOR USER: appuser
<127.0.0.1> EXEC /bin/sh -c '/usr/bin/python2 && sleep 0'

您能否建议一下是否可以不使用 sudo

最佳答案

将我的所有评论放在一起,形成一个全面的答案。

<127.0.0.1> ESTABLISH LOCAL CONNECTION FOR USER: appuser

这表明您正在通过local connection plugin连接到本地主机。 ,要么是因为您明确地重新声明了主机,要么是因为您正在使用 implicit localhost 。从讨论来看,你属于第二种情况。

当使用local连接插件时,如上述文档所示,remote_user将被忽略。尝试更改用户没有任何效果,如下面的测试运行所示(用户 (u)ids 已更改):

# Check we are locally running as user1
$ id -a
uid=xxxx(user1) gid=yyy(group1) groups=yyy(group1)
# Running the same command through ansible returns the same result
$ ansible localhost -a 'id -a'
localhost | CHANGED | rc=0 >>
uid=xxxx(user1) gid=yyy(group1) groups=yyy(group1)
# Trying to change the remote user has no effect
$ ansible localhost -u whatever -a 'id -a'
localhost | CHANGED | rc=0 >>
uid=xxxx(user1) gid=yyy(group1) groups=yyy(group1)

在不更改 Playbook 和/或库存的情况下,唯一的解决方案是以需要创建目录的用户身份启动 Playbook。

由于您可以使用 ssh,因此另一个解决方案是声明一个仅用于此目的的新主机,该主机将通过 ssh 定位本地 IP。 (注意:您可以像这样显式声明localhost,但所有连接都将通过 ssh,这可能不是您想要做的)。

在库存顶部的某个位置添加以下行:

localssh ansible_host=127.0.0.1

并在你的剧本中进行更改

hosts: localssh

现在与本地计算机的连接将通过 ssh 进行,并且将正确遵守 remote_user

关于ssh - Ansible 无法使用不同用户在本地主机上创建文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61580854/

相关文章:

ansible - 如何在ansible中为变量分配随机数?

bash - 使 rustc、cargo、rustup、rustdoc 命令在适用于 Linux 的 Windows 子系统中无需 sudo 即可运行

PHP 为 sudo 创建 'fake' TTY

php - Magento索引器通过ssh运行但不是cron作业

linux - `ssh -vT git@github.com` 工作正常,代理在 github ssh key 中。问题在哪里?

amazon-web-services - 在 Ansible 中组合 JSON 对象中的数组

linux - 尝试使用 sudo 将文件附加到根拥有的文件时权限被拒绝

使用sftp到特定文件夹的linux新用户

mysql - GCE 和 Debian - 无法从 TOAD 连接到 MYSQL

ansible - 使用 to_nice_yaml 维护根和嵌套元素将 vars 元素导出到 yaml 文件